From 233edef9cd911632fe33f72f5b98424d216cc02b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E8=80=81=E5=B8=88?= <1161625498@qq.com> Date: Wed, 30 Apr 2025 18:10:18 +0800 Subject: [PATCH 1/3] add sample --- .../board_sample/sample_dimming/feature.h | 120 ++ vendor/yibaina_3061M/1025_FOC/readme.md | 20 + .../1025_FOC/user/generatecode/feature.h | 94 ++ .../1025_FOC/user/generatecode/main.h | 98 ++ .../1025_FOC/user/generatecode/system_init.c | 677 +++++++++++ vendor/yibaina_3061M/1025_FOC/user/main.c | 71 ++ .../inc/mcs_carrier.h | 142 +++ .../inc/mcs_chip_config.h | 76 ++ .../inc/mcs_ctlmode_config.h | 73 ++ .../inc/mcs_motor_process.h} | 75 +- .../inc/mcs_status.h | 188 +++ .../inc/mcs_user_config.h | 121 ++ .../protection/common/mcs_prot_cmm.c | 43 + .../protection/common/mcs_prot_cmm.h | 136 +++ .../protection/common/mcs_prot_user.c | 137 +++ .../protection/common/mcs_prot_user.h | 54 + .../protection/common/mcs_prot_user_config.h | 125 ++ .../protection/mcs_curr_prot.c | 267 +++++ .../protection/mcs_curr_prot.h | 52 + .../protection/mcs_dc_volt_prot.c | 495 ++++++++ .../protection/mcs_dc_volt_prot.h | 69 ++ .../protection/mcs_motor_stalling.c | 112 ++ .../protection/mcs_motor_stalling.h | 45 + .../protection/mcs_temp_prot.c | 262 +++++ .../protection/mcs_temp_prot.h | 49 + .../user/pmsm_sensorless_2shunt_foc/readme.md | 10 + .../src/mcs_carrier.c | 144 +++ .../src/mcs_motor_process.c | 950 +++++++++++++++ .../user_interface/cust_process.c | 718 +++++++++++ .../user_interface/cust_process.h | 36 + .../user_interface/hmi_module.c | 57 + .../user_interface/hmi_module.h | 37 + .../user_interface/protocol.c | 174 +++ .../user_interface/protocol.h | 121 ++ .../user_interface/uart_module.c | 184 +++ .../user_interface/uart_module.h | 47 + .../user/generatecode/feature.h | 94 ++ .../user/generatecode/main.h | 98 ++ .../user/generatecode/system_init.c | 677 +++++++++++ .../1025_Six_Step_Wave/user/main.c | 71 ++ .../inc/mcs_carrier.h | 142 +++ .../inc/mcs_chip_config.h | 76 ++ .../inc/mcs_ctlmode_config.h | 73 ++ .../inc/mcs_motor_process.h | 45 + .../inc/mcs_status.h | 188 +++ .../inc/mcs_user_config.h | 108 ++ .../protection/common/mcs_prot_cmm.c | 43 + .../protection/common/mcs_prot_cmm.h | 136 +++ .../protection/common/mcs_prot_user.c | 137 +++ .../protection/common/mcs_prot_user.h | 54 + .../protection/common/mcs_prot_user_config.h | 125 ++ .../protection/mcs_curr_prot.c | 267 +++++ .../protection/mcs_curr_prot.h | 52 + .../protection/mcs_dc_volt_prot.c | 495 ++++++++ .../protection/mcs_dc_volt_prot.h | 69 ++ .../protection/mcs_motor_stalling.c | 112 ++ .../protection/mcs_motor_stalling.h | 45 + .../protection/mcs_temp_prot.c | 262 +++++ .../protection/mcs_temp_prot.h | 49 + .../user/pmsm_sensorless_2shunt_foc/readme.md | 10 + .../src/mcs_carrier.c | 144 +++ .../src/mcs_motor_process.c | 950 +++++++++++++++ .../user_interface/cust_process.c | 718 +++++++++++ .../user_interface/cust_process.h | 36 + .../user_interface/hmi_module.c | 57 + .../user_interface/hmi_module.h | 37 + .../user_interface/protocol.c | 174 +++ .../user_interface/protocol.h | 121 ++ .../user_interface/uart_module.c | 184 +++ .../user_interface/uart_module.h | 47 + .../user/generatecode/feature.h | 94 ++ .../user/generatecode/main.h | 91 ++ .../user/generatecode/system_init.c | 597 ++++++++++ .../1025_Six_Step_Wave_Wifi/user/main.c | 70 ++ .../application/mcs_motor_process.c | 626 ++++++++++ .../application/mcs_motor_process.h | 47 + .../application/mcs_user_config.h | 94 ++ .../common/mcs_carrier.c | 224 ++++ .../common/mcs_carrier.h | 91 ++ .../common/mcs_fsm.h | 55 + .../func/mcs_six_step.c | 126 ++ .../func/mcs_six_step.h | 79 ++ .../func/mcs_status.h | 188 +++ .../readme.md | 13 + .../1025_Six_Step_Wave_Wifi/user/wifi/MQTT.c | 397 +++++++ .../1025_Six_Step_Wave_Wifi/user/wifi/MQTT.h | 71 ++ .../1025_Six_Step_Wave_Wifi/user/wifi/wifi.c | 412 +++++++ .../1025_Six_Step_Wave_Wifi/user/wifi/wifi.h | 71 ++ vendor/yibaina_3061M/AS5600_IIC/readme.md | 29 + .../AS5600_IIC/user/generatecode/feature.h | 94 ++ .../AS5600_IIC/user/generatecode/main.h | 98 ++ .../user/generatecode/system_init.c | 677 +++++++++++ vendor/yibaina_3061M/AS5600_IIC/user/main.c | 71 ++ .../inc/mcs_carrier.h | 142 +++ .../inc/mcs_chip_config.h | 76 ++ .../inc/mcs_ctlmode_config.h | 73 ++ .../inc/mcs_motor_process.h | 45 + .../inc/mcs_status.h | 188 +++ .../inc/mcs_user_config.h | 108 ++ .../protection/common/mcs_prot_cmm.c | 43 + .../protection/common/mcs_prot_cmm.h | 136 +++ .../protection/common/mcs_prot_user.c | 137 +++ .../protection/common/mcs_prot_user.h | 54 + .../protection/common/mcs_prot_user_config.h | 125 ++ .../protection/mcs_curr_prot.c | 267 +++++ .../protection/mcs_curr_prot.h | 52 + .../protection/mcs_dc_volt_prot.c | 495 ++++++++ .../protection/mcs_dc_volt_prot.h | 69 ++ .../protection/mcs_motor_stalling.c | 112 ++ .../protection/mcs_motor_stalling.h | 45 + .../protection/mcs_temp_prot.c | 262 +++++ .../protection/mcs_temp_prot.h | 49 + .../user/pmsm_sensorless_2shunt_foc/readme.md | 10 + .../src/mcs_carrier.c | 144 +++ .../src/mcs_motor_process.c | 950 +++++++++++++++ .../user_interface/cust_process.c | 718 +++++++++++ .../user_interface/cust_process.h | 36 + .../user_interface/hmi_module.c | 57 + .../user_interface/hmi_module.h | 37 + .../user_interface/protocol.c | 174 +++ .../user_interface/protocol.h | 121 ++ .../user_interface/uart_module.c | 184 +++ .../user_interface/uart_module.h | 47 + vendor/yibaina_3061M/E7050_FOC/readme.md | 20 + .../E7050_FOC/user/generatecode/feature.h | 94 ++ .../E7050_FOC/user/generatecode/main.h | 98 ++ .../E7050_FOC/user/generatecode/system_init.c | 677 +++++++++++ vendor/yibaina_3061M/E7050_FOC/user/main.c | 71 ++ .../inc/mcs_carrier.h | 142 +++ .../inc/mcs_chip_config.h | 76 ++ .../inc/mcs_ctlmode_config.h | 73 ++ .../inc/mcs_motor_process.h | 45 + .../inc/mcs_status.h | 188 +++ .../inc/mcs_user_config.h | 108 ++ .../protection/common/mcs_prot_cmm.c | 43 + .../protection/common/mcs_prot_cmm.h | 136 +++ .../protection/common/mcs_prot_user.c | 137 +++ .../protection/common/mcs_prot_user.h | 54 + .../protection/common/mcs_prot_user_config.h | 125 ++ .../protection/mcs_curr_prot.c | 267 +++++ .../protection/mcs_curr_prot.h | 52 + .../protection/mcs_dc_volt_prot.c | 495 ++++++++ .../protection/mcs_dc_volt_prot.h | 69 ++ .../protection/mcs_motor_stalling.c | 112 ++ .../protection/mcs_motor_stalling.h | 45 + .../protection/mcs_temp_prot.c | 262 +++++ .../protection/mcs_temp_prot.h | 49 + .../user/pmsm_sensorless_2shunt_foc/readme.md | 10 + .../src/mcs_carrier.c | 144 +++ .../src/mcs_motor_process.c | 950 +++++++++++++++ .../user_interface/cust_process.c | 718 +++++++++++ .../user_interface/cust_process.h | 36 + .../user_interface/hmi_module.c | 57 + .../user_interface/hmi_module.h | 37 + .../user_interface/protocol.c | 174 +++ .../user_interface/protocol.h | 121 ++ .../user_interface/uart_module.c | 184 +++ .../user_interface/uart_module.h | 47 + .../E7050_Six_Step_Wave/readme.md | 13 + .../user/generatecode/feature.h | 94 ++ .../user/generatecode/main.h | 84 ++ .../user/generatecode/system_init.c | 530 +++++++++ .../user}/main.c | 12 +- .../application/mcs_motor_process.c | 562 +++++++++ .../application/mcs_motor_process.h | 47 + .../application/mcs_user_config.h | 94 ++ .../common/mcs_carrier.c | 224 ++++ .../common/mcs_carrier.h | 91 ++ .../common/mcs_fsm.h | 55 + .../func/mcs_six_step.c | 126 ++ .../func/mcs_six_step.h | 79 ++ .../func/mcs_status.h | 188 +++ .../user/generatecode/feature.h | 94 ++ .../user/generatecode/main.h | 91 ++ .../user/generatecode/system_init.c | 680 +++++++++++ .../E7050_oled_ifd_sample/user/main.c | 72 ++ .../IR/ifd.c | 287 +++++ .../IR/ifd.h | 36 + .../application/mcs_motor_process.c | 781 ++++++++++++ .../application/mcs_motor_process.h | 47 + .../application/mcs_user_config.h | 94 ++ .../common/mcs_carrier.c | 224 ++++ .../common/mcs_carrier.h | 91 ++ .../common/mcs_fsm.h | 55 + .../func/mcs_six_step.c | 126 ++ .../func/mcs_six_step.h | 79 ++ .../func/mcs_status.h | 188 +++ .../readme.md | 13 + .../user/oled/inc/oled.h | 46 + .../user/oled/inc/oled_fonts.h | 562 +++++++++ .../user/oled/src/oled.c | 352 ++++++ vendor/yibaina_3061M/GIM4310-10_FOC/readme.md | 20 + .../user/generatecode/feature.h | 94 ++ .../GIM4310-10_FOC/user/generatecode/main.h | 98 ++ .../user/generatecode/system_init.c | 677 +++++++++++ .../yibaina_3061M/GIM4310-10_FOC/user/main.c | 71 ++ .../inc/mcs_carrier.h | 142 +++ .../inc/mcs_chip_config.h | 76 ++ .../inc/mcs_ctlmode_config.h | 73 ++ .../inc/mcs_motor_process.h | 45 + .../inc/mcs_status.h | 188 +++ .../inc/mcs_user_config.h | 120 ++ .../protection/common/mcs_prot_cmm.c | 43 + .../protection/common/mcs_prot_cmm.h | 136 +++ .../protection/common/mcs_prot_user.c | 137 +++ .../protection/common/mcs_prot_user.h | 54 + .../protection/common/mcs_prot_user_config.h | 125 ++ .../protection/mcs_curr_prot.c | 267 +++++ .../protection/mcs_curr_prot.h | 52 + .../protection/mcs_dc_volt_prot.c | 495 ++++++++ .../protection/mcs_dc_volt_prot.h | 69 ++ .../protection/mcs_motor_stalling.c | 112 ++ .../protection/mcs_motor_stalling.h | 45 + .../protection/mcs_temp_prot.c | 262 +++++ .../protection/mcs_temp_prot.h | 49 + .../user/pmsm_sensorless_2shunt_foc/readme.md | 10 + .../src/mcs_carrier.c | 144 +++ .../src/mcs_motor_process.c | 951 +++++++++++++++ .../user_interface/cust_process.c | 718 +++++++++++ .../user_interface/cust_process.h | 36 + .../user_interface/hmi_module.c | 57 + .../user_interface/hmi_module.h | 37 + .../user_interface/protocol.c | 174 +++ .../user_interface/protocol.h | 121 ++ .../user_interface/uart_module.c | 184 +++ .../user_interface/uart_module.h | 47 + .../user/generatecode/feature.h | 94 ++ .../user/generatecode/main.h | 84 ++ .../user/generatecode/system_init.c | 530 +++++++++ .../GIM4310-10_Six_Step_Wave/user/main.c | 67 ++ .../application/mcs_motor_process.c | 562 +++++++++ .../application/mcs_motor_process.h | 47 + .../application/mcs_user_config.h | 94 ++ .../common/mcs_carrier.c | 224 ++++ .../common/mcs_carrier.h | 91 ++ .../common/mcs_fsm.h | 55 + .../func/mcs_six_step.c | 126 ++ .../func/mcs_six_step.h | 79 ++ .../func/mcs_status.h | 188 +++ .../readme.md | 13 + .../user/generatecode/feature.h | 120 ++ .../user/generatecode/ifd.c | 297 +++++ .../user/generatecode/ifd.h | 33 + .../user/generatecode/main.h | 67 ++ .../user}/generatecode/system_init.c | 76 +- .../Infrared_Receiver_sample/user/main.c | 77 ++ .../demo/sample_gpio_key/readme.md | 78 -- .../oled_sample/user/generatecode/feature.h | 120 ++ .../user}/generatecode/main.h | 13 +- .../user/generatecode/system_init.c | 215 ++++ .../user/main.c} | 144 ++- .../oled_sample/user/oled/inc/oled.h | 46 + .../oled_sample/user/oled/inc/oled_fonts.h | 562 +++++++++ .../oled_sample/user/oled/src/oled.c | 352 ++++++ .../yibaina_3061M/pmsm_pos_qdm_foc/readme.md | 22 + .../user}/generatecode/feature.h | 0 .../pmsm_pos_qdm_foc/user/generatecode/main.h | 101 ++ .../user/generatecode/system_init.c | 775 ++++++++++++ .../pmsm_pos_qdm_foc/user/main.c | 81 ++ .../inc/mcs_carrier.h | 153 +++ .../inc/mcs_chip_config.h | 81 ++ .../inc/mcs_ctlmode_config.h | 75 ++ .../inc/mcs_ex_common.h | 78 ++ .../inc/mcs_inc_enc.h | 126 ++ .../inc/mcs_motor_process.h | 45 + .../inc/mcs_status.h | 188 +++ .../inc/mcs_user_config.h | 143 +++ .../protection/common/mcs_prot_cmm.c | 43 + .../protection/common/mcs_prot_cmm.h | 136 +++ .../protection/common/mcs_prot_user.c | 137 +++ .../protection/common/mcs_prot_user.h | 54 + .../protection/common/mcs_prot_user_config.h | 130 ++ .../protection/mcs_curr_prot.c | 267 +++++ .../protection/mcs_curr_prot.h | 52 + .../protection/mcs_dc_volt_prot.c | 495 ++++++++ .../protection/mcs_dc_volt_prot.h | 69 ++ .../protection/mcs_motor_stalling.c | 112 ++ .../protection/mcs_motor_stalling.h | 45 + .../protection/mcs_temp_prot.c | 262 +++++ .../protection/mcs_temp_prot.h | 49 + .../user/pmsm_encode_qdm_2shunt_foc/readme.md | 12 + .../src/mcs_carrier.c | 136 +++ .../src/mcs_inc_enc.c | 236 ++++ .../src/mcs_motor_process.c | 1047 +++++++++++++++++ .../user_interface/cust_process.c | 639 ++++++++++ .../user_interface/cust_process.h | 36 + .../user_interface/hmi_module.c | 58 + .../user_interface/hmi_module.h | 37 + .../user_interface/protocol.c | 174 +++ .../user_interface/protocol.h | 121 ++ .../user_interface/uart_module.c | 234 ++++ .../user_interface/uart_module.h | 48 + .../user/generatecode/feature.h | 120 ++ .../user/generatecode/main.h | 61 + .../user/generatecode/system_init.c | 166 +++ .../user/generatecode/wifi/MQTT.c | 397 +++++++ .../user/generatecode/wifi/MQTT.h | 71 ++ .../user/generatecode/wifi/wifi.c | 413 +++++++ .../user/generatecode/wifi/wifi.h | 71 ++ .../wifi_tenxunyun_mqtt_sample/user/main.c | 74 ++ 300 files changed, 51329 insertions(+), 203 deletions(-) create mode 100644 src/application/board_sample/sample_dimming/feature.h create mode 100644 vendor/yibaina_3061M/1025_FOC/readme.md create mode 100644 vendor/yibaina_3061M/1025_FOC/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/main.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h rename vendor/yibaina_3061M/{demo/sample_gpio_key/gpio_key_sample.h => 1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h} (76%) create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/readme.md create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c create mode 100644 vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/main.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/readme.md create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/main.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/readme.md create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/MQTT.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/MQTT.h create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/wifi.c create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/wifi.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/readme.md create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/main.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/readme.md create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c create mode 100644 vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/readme.md create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/main.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/readme.md create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c create mode 100644 vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/readme.md create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/system_init.c rename vendor/yibaina_3061M/{demo/sample_gpio_key => E7050_Six_Step_Wave/user}/main.c (92%) create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h create mode 100644 vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/main.c create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/IR/ifd.c create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/IR/ifd.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/readme.md create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/inc/oled.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/inc/oled_fonts.h create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/src/oled.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/readme.md create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/main.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/readme.md create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/main.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/readme.md create mode 100644 vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/ifd.c create mode 100644 vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/ifd.h create mode 100644 vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/main.h rename vendor/yibaina_3061M/{demo/sample_gpio_key => Infrared_Receiver_sample/user}/generatecode/system_init.c (62%) create mode 100644 vendor/yibaina_3061M/Infrared_Receiver_sample/user/main.c delete mode 100644 vendor/yibaina_3061M/demo/sample_gpio_key/readme.md create mode 100644 vendor/yibaina_3061M/oled_sample/user/generatecode/feature.h rename vendor/yibaina_3061M/{demo/sample_gpio_key => oled_sample/user}/generatecode/main.h (94%) create mode 100644 vendor/yibaina_3061M/oled_sample/user/generatecode/system_init.c rename vendor/yibaina_3061M/{demo/sample_gpio_key/gpio_key_sample.c => oled_sample/user/main.c} (57%) create mode 100644 vendor/yibaina_3061M/oled_sample/user/oled/inc/oled.h create mode 100644 vendor/yibaina_3061M/oled_sample/user/oled/inc/oled_fonts.h create mode 100644 vendor/yibaina_3061M/oled_sample/user/oled/src/oled.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/readme.md rename vendor/yibaina_3061M/{demo/sample_gpio_key => pmsm_pos_qdm_foc/user}/generatecode/feature.h (100%) create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/main.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_carrier.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_chip_config.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_ctlmode_config.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_ex_common.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_inc_enc.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_motor_process.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_status.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_user_config.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_cmm.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_cmm.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user_config.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_curr_prot.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_curr_prot.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_dc_volt_prot.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_dc_volt_prot.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_motor_stalling.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_motor_stalling.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_temp_prot.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_temp_prot.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/readme.md create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_carrier.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_inc_enc.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_motor_process.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/cust_process.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/cust_process.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/hmi_module.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/hmi_module.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/protocol.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/protocol.h create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/uart_module.c create mode 100644 vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/uart_module.h create mode 100644 vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/MQTT.c create mode 100644 vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/MQTT.h create mode 100644 vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/wifi.c create mode 100644 vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/wifi.h create mode 100644 vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/main.c diff --git a/src/application/board_sample/sample_dimming/feature.h b/src/application/board_sample/sample_dimming/feature.h new file mode 100644 index 00000000..38a0a3d5 --- /dev/null +++ b/src/application/board_sample/sample_dimming/feature.h @@ -0,0 +1,120 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-09 18:35:27 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +#define CHIP_3066MNPIRH MACRO_ENABLE + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +#define MCS_PARAM_CHECK MACRO_ENABLE +#define APT_PARAM_CHECK MACRO_ENABLE +#define ADC_PARAM_CHECK MACRO_ENABLE +#define CAPM_PARAM_CHECK MACRO_ENABLE +#define CRG_PARAM_CHECK MACRO_ENABLE +#define I2C_PARAM_CHECK MACRO_ENABLE +#define UART_PARAM_CHECK MACRO_ENABLE +#define SPI_PARAM_CHECK MACRO_ENABLE +#define TIMER_PARAM_CHECK MACRO_ENABLE +#define IWDG_PARAM_CHECK MACRO_ENABLE +#define WWDG_PARAM_CHECK MACRO_ENABLE +#define GPIO_PARAM_CHECK MACRO_ENABLE +#define GPT_PARAM_CHECK MACRO_ENABLE +#define DMA_PARAM_CHECK MACRO_ENABLE +#define CRC_PARAM_CHECK MACRO_ENABLE +#define CFD_PARAM_CHECK MACRO_ENABLE +#define CMM_PARAM_CHECK MACRO_ENABLE +#define CAN_PARAM_CHECK MACRO_ENABLE +#define FLASH_PARAM_CHECK MACRO_ENABLE +#define PMC_PARAM_CHECK MACRO_ENABLE +#define ACMP_PARAM_CHECK MACRO_ENABLE +#define DAC_PARAM_CHECK MACRO_ENABLE +#define PGA_PARAM_CHECK MACRO_ENABLE +#define IOCMG_PARAM_CHECK MACRO_ENABLE +#define QDM_PARAM_CHECK MACRO_ENABLE + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 25000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_NO_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/readme.md b/vendor/yibaina_3061M/1025_FOC/readme.md new file mode 100644 index 00000000..2bf07f37 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/readme.md @@ -0,0 +1,20 @@ +# 1025_foc + +**【功能描述】** + +- 基于ECMCU105H/ECBMCU201MPC单板的单电机双电阻采样的无感Foc应用 + +**【环境要求】** + +- 所有单板电源改制为演示用的24V低压,电机选用1025 +- 电机(黄绿蓝)相线分别对应功率板上U/V/W通道接口 + +**【配置方法】** + +- 将user文件夹替换原工程文件夹即可 + +【操作说明】 + +- 点击开发板按键启动电机 + +- 开发板蓝色电位器,可以调节电机转动的快慢。(1-29HZ) \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/generatecode/feature.h b/vendor/yibaina_3061M/1025_FOC/user/generatecode/feature.h new file mode 100644 index 00000000..a18d8c21 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/generatecode/feature.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-17 14:22:06 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define CHIP_3061MNPICA MACRO_ENABLE + +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 30000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_UART_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/generatecode/main.h b/vendor/yibaina_3061M/1025_FOC/user/generatecode/main.h new file mode 100644 index 00000000..1c8caefb --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/generatecode/main.h @@ -0,0 +1,98 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.h + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-17 14:22:06 + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_SYSTEM_INIT_H +#define McuMagicTag_SYSTEM_INIT_H + +#include "adc.h" +#include "adc_ex.h" +#include "acmp.h" +#include "acmp_ex.h" +#include "apt.h" +#include "uart.h" +#include "uart_ex.h" +#include "gpio.h" +#include "timer.h" +#include "timer_ex.h" +#include "pga.h" +#include "crg.h" +#include "dma.h" +#include "dma_ex.h" +#include "iocmg.h" + +#define IO_SPEED_FAST 0x00U +#define IO_SPEED_SLOW 0x01U + +#define IO_DRV_LEVEL4 0x00U +#define IO_DRV_LEVEL3 0x01U +#define IO_DRV_LEVEL2 0x02U +#define IO_DRV_LEVEL1 0x03U + +#define XTAL_DRV_LEVEL4 0x03U +#define XTAL_DRV_LEVEL3 0x02U +#define XTAL_DRV_LEVEL2 0x01U +#define XTAL_DRV_LEVEL1 0x00U + +#define GpioStartStop_PIN GPIO_PIN_4 +#define GpioStartStop_HANDLE g_gpio2 + +extern ACMP_Handle g_acmp0; +extern PGA_Handle g_pga0; +extern PGA_Handle g_pga1; +extern TIMER_Handle g_timer0; +extern TIMER_Handle g_timer1; +extern UART_Handle g_uart0; +extern APT_Handle g_apt0; +extern APT_Handle g_apt1; +extern APT_Handle g_apt2; +extern ADC_Handle g_adc0; + +extern DMA_Handle g_dmac; + +extern GPIO_Handle g_gpio2; +extern GPIO_Handle g_gpio1; + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect); +void SystemInit(void); + +void UART0WriteInterruptCallback(void *handle); +void UART0ReadInterruptCallback(void *handle); + +void UART0InterruptErrorCallback(void *handle); +void MotorStatemachineCallBack(void *handle); +void TIMER1_DMAOverFlow_InterruptProcess(void *handle); +void CheckPotentiometerValueCallback(void *handle); +void TIMER0_DMAOverFlow_InterruptProcess(void *handle); +void MotorCarrierProcessCallback(void *aptHandle); +void MotorSysErrCallback(void *aptHandle); + +void UART0_TXDMACallback(void *handle); + +void MotorStartStopKeyCallback(void *param); + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_SYSTEM_INIT_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/generatecode/system_init.c b/vendor/yibaina_3061M/1025_FOC/user/generatecode/system_init.c new file mode 100644 index 00000000..3c5e593c --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/generatecode/system_init.c @@ -0,0 +1,677 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file system_init.c + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-17 14:22:06 + */ + +#include "main.h" +#include "ioconfig.h" +#include "iocmg_ip.h" + +#define UART0_BAUD_RATE 1843200 + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) +{ + CRG_Handle crg; + crg.baseAddress = CRG; + crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC; + crg.pllPreDiv = CRG_PLL_PREDIV_4; + crg.pllFbDiv = 48; /* PLL Multiplier 48 */ + crg.pllPostDiv = CRG_PLL_POSTDIV_2; + crg.coreClkSelect = CRG_CORE_CLK_SELECT_PLL; + crg.handleEx.pllPostDiv2 = CRG_PLL_POSTDIV2_3; + crg.handleEx.clk1MSelect = CRG_1M_CLK_SELECT_HOSC; + crg.handleEx.clk1MDiv = (25 - 1); /* The 1 MHz freq is equal to the input clock frequency / (clk_1m_div + 1). 25 is the div of the clk_1m in CLOCK. */ + + if (HAL_CRG_Init(&crg) != BASE_STATUS_OK) { + return BASE_STATUS_ERROR; + } + *coreClkSelect = crg.coreClkSelect; + return BASE_STATUS_OK; +} + +static void DMA_Channel0Init(void *handle) +{ + DMA_ChannelParam dma_param; + dma_param.direction = DMA_MEMORY_TO_PERIPH_BY_DMAC; + dma_param.srcAddrInc = DMA_ADDR_INCREASE; + dma_param.destAddrInc = DMA_ADDR_UNALTERED; + dma_param.srcPeriph = DMA_REQUEST_MEM; + dma_param.destPeriph = DMA_REQUEST_UART0_TX; + dma_param.srcWidth = DMA_TRANSWIDTH_BYTE; + dma_param.destWidth = DMA_TRANSWIDTH_BYTE; + dma_param.srcBurst = DMA_BURST_LENGTH_1; + dma_param.destBurst = DMA_BURST_LENGTH_1; + dma_param.pHandle = handle; + HAL_DMA_InitChannel(&g_dmac, &dma_param, DMA_CHANNEL_ZERO); +} + +static void DMA_Init(void) +{ + HAL_CRG_IpEnableSet(DMA_BASE, IP_CLK_ENABLE); + g_dmac.baseAddress = DMA; + IRQ_Register(IRQ_DMA_TC, HAL_DMA_IrqHandlerTc, &g_dmac); + IRQ_Register(IRQ_DMA_ERR, HAL_DMA_IrqHandlerError, &g_dmac); + IRQ_EnableN(IRQ_DMA_TC); + IRQ_EnableN(IRQ_DMA_ERR); + HAL_DMA_Init(&g_dmac); + DMA_Channel0Init((void *)(&g_uart0)); + HAL_DMA_SetChannelPriorityEx(&g_dmac, DMA_CHANNEL_ZERO, DMA_PRIORITY_HIGHEST); +} + +static void ACMP0_Init(void) +{ + HAL_CRG_IpEnableSet(ACMP0_BASE, IP_CLK_ENABLE); /* ACMP clock bit reset. */ + g_acmp0.baseAddress = ACMP0_BASE; + g_acmp0.inOutConfig.inputNNum = ACMP_INPUT_N_SELECT2; + g_acmp0.inOutConfig.inputPNum = ACMP_INPUT_P_SELECT2; + g_acmp0.inOutConfig.polarity = ACMP_OUT_NOT_INVERT; + g_acmp0.filterCtrl.filterMode = ACMP_FILTER_NONE; + g_acmp0.hysteresisVol = ACMP_HYS_VOL_30MV; + g_acmp0.interruptEn = BASE_CFG_UNSET; + HAL_ACMP_Init(&g_acmp0); +} + +static void ADC0_Init(void) +{ + HAL_CRG_IpEnableSet(ADC0_BASE, IP_CLK_ENABLE); + HAL_CRG_IpClkSelectSet(ADC0_BASE, CRG_ADC_CLK_ASYN_PLL_DIV); + HAL_CRG_IpClkDivSet(ADC0_BASE, CRG_ADC_DIV_1); + + g_adc0.baseAddress = ADC0; + g_adc0.socPriority = ADC_PRIMODE_ALL_ROUND; + + HAL_ADC_Init(&g_adc0); + + SOC_Param socParam = {0}; + socParam.adcInput = ADC_CH_ADCINA0; /* PGA0_OUT(ADC AIN0) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM1, &socParam); + + socParam.adcInput = ADC_CH_ADCINA1; /* PGA1_OUT(ADC AIN1) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM6, &socParam); + + socParam.adcInput = ADC_CH_ADCINA9; /* PIN7(ADC AIN9) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM0, &socParam); + + socParam.adcInput = ADC_CH_ADCINA5; /* PIN2(ADC AIN5) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM3, &socParam); + + socParam.adcInput = ADC_CH_ADCINA15; /* PIN14(ADC AIN15) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM4, &socParam); +} + +__weak void MotorSysErrCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_EVENT_INTERRUPT */ + /* USER CODE END APT0_EVENT_INTERRUPT */ +} + +__weak void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +static void APT0_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_ENABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt0, &protectApt); +} + +static void APT0_Init(void) +{ + HAL_CRG_IpEnableSet(APT0_BASE, IP_CLK_ENABLE); + + g_apt0.baseAddress = APT0; + + /* Clock Settings */ + g_apt0.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt0.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt0.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt0.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt0.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.divInitVal = 0; + g_apt0.waveform.cntInitVal = 0; + g_apt0.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt0.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt0.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt0.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt0.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCA = 375; /* 375 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt0.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCA = 1; + + /* ADC Trigger SOCB */ + g_apt0.adcTrg.trgEnSOCB = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCB = 1; + g_apt0.adcTrg.trgSrcSOCB = APT_CS_SRC_CNTR_CMPB_DOWN; + g_apt0.adcTrg.trgScaleSOCB = 1; + + g_apt0.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + /* Timer Trigger */ + g_apt0.tmrInterrupt.tmrInterruptEn = BASE_CFG_ENABLE; + g_apt0.tmrInterrupt.tmrInterruptSrc = APT_INT_SRC_CNTR_ZERO; + g_apt0.tmrInterrupt.tmrInterruptScale = 1; + + APT0_ProtectInit(); + + HAL_APT_PWMInit(&g_apt0); + HAL_APT_RegisterCallBack(&g_apt0, APT_EVENT_INTERRUPT, MotorSysErrCallback); + IRQ_SetPriority(IRQ_APT0_EVT, 7); /* 7 is priority value */ + IRQ_Register(IRQ_APT0_EVT, HAL_APT_EventIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_EVT); + HAL_APT_RegisterCallBack(&g_apt0, APT_TIMER_INTERRUPT, MotorCarrierProcessCallback); + IRQ_SetPriority(IRQ_APT0_TMR, 5); /* 5 is priority value */ + IRQ_Register(IRQ_APT0_TMR, HAL_APT_TimerIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_TMR); +} + +static void APT1_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt1, &protectApt); +} + +static void APT1_Init(void) +{ + HAL_CRG_IpEnableSet(APT1_BASE, IP_CLK_ENABLE); + + g_apt1.baseAddress = APT1; + + /* Clock Settings */ + g_apt1.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt1.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt1.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt1.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt1.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.divInitVal = 0; + g_apt1.waveform.cntInitVal = 0; + g_apt1.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt1.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt1.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt1.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + APT1_ProtectInit(); + + HAL_APT_PWMInit(&g_apt1); +} + +static void APT2_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt2, &protectApt); +} + +static void APT2_Init(void) +{ + HAL_CRG_IpEnableSet(APT2_BASE, IP_CLK_ENABLE); + + g_apt2.baseAddress = APT2; + + /* Clock Settings */ + g_apt2.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt2.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt2.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt2.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt2.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.divInitVal = 0; + g_apt2.waveform.cntInitVal = 0; + g_apt2.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt2.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt2.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt2.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt2.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + APT2_ProtectInit(); + + HAL_APT_PWMInit(&g_apt2); +} + +__weak void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + BASE_FUNC_UNUSED(handle); +} + +static void GPIO_Init(void) +{ + HAL_CRG_IpEnableSet(GPIO2_BASE, IP_CLK_ENABLE); + g_gpio2.baseAddress = GPIO2; + + g_gpio2.pins = GPIO_PIN_3; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_NONE); + + g_gpio2.pins = GPIO_PIN_4; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_INPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_LOW_LEVEL); + + HAL_CRG_IpEnableSet(GPIO1_BASE, IP_CLK_ENABLE); + g_gpio1.baseAddress = GPIO1; + + g_gpio1.pins = GPIO_PIN_0; + HAL_GPIO_Init(&g_gpio1); + HAL_GPIO_SetDirection(&g_gpio1, g_gpio1.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio1, g_gpio1.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio1, g_gpio1.pins, GPIO_INT_TYPE_NONE); + + HAL_GPIO_RegisterCallBack(&g_gpio2, GPIO_PIN_4, MotorStartStopKeyCallback); + IRQ_Register(IRQ_GPIO2, HAL_GPIO_IrqHandler, &g_gpio2); + IRQ_SetPriority(IRQ_GPIO2, 1); /* set gpio1 interrupt priority to 1, 1~15. 1 is priority value */ + IRQ_EnableN(IRQ_GPIO2); /* gpio interrupt enable */ + + return; +} + +static void PGA0_Init(void) +{ + HAL_CRG_IpEnableSet(PGA0_BASE, IP_CLK_ENABLE); + + g_pga0.baseAddress = PGA0_BASE; + g_pga0.externalResistorMode = BASE_CFG_ENABLE; + g_pga0.handleEx.extCapCompensation = PGA_EXT_COMPENSATION_2X; + HAL_PGA_Init(&g_pga0); +} + +static void PGA1_Init(void) +{ + HAL_CRG_IpEnableSet(PGA1_BASE, IP_CLK_ENABLE); + + g_pga1.baseAddress = PGA1_BASE; + g_pga1.externalResistorMode = BASE_CFG_ENABLE; + g_pga1.handleEx.extCapCompensation = PGA_EXT_COMPENSATION_2X; + HAL_PGA_Init(&g_pga1); +} + +__weak void CheckPotentiometerValueCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN CheckPotentiometerValueCallback */ + /* USER CODE END CheckPotentiometerValueCallback */ +} + +static void TIMER0_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER0_BASE, IP_CLK_ENABLE); /* TIMER0 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER0) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 1000000; + + g_timer0.baseAddress = TIMER0; + g_timer0.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer0.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer0.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer0.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer0.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer0.interruptEn = BASE_CFG_ENABLE; + g_timer0.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer0.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer0); + IRQ_Register(IRQ_TIMER0, HAL_TIMER_IrqHandler, &g_timer0); + + HAL_TIMER_RegisterCallback(&g_timer0, TIMER_PERIOD_FIN, CheckPotentiometerValueCallback); + IRQ_SetPriority(IRQ_TIMER0, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_TIMER0); +} + +__weak void MotorStatemachineCallBack(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN MotorStatemachineCallBack */ + /* USER CODE END MotorStatemachineCallBack */ +} + +static void TIMER1_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER1_BASE, IP_CLK_ENABLE); /* TIMER1 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER1) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 500; + + g_timer1.baseAddress = TIMER1; + g_timer1.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer1.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer1.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer1.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer1.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer1.interruptEn = BASE_CFG_ENABLE; + g_timer1.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer1.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer1); + IRQ_Register(IRQ_TIMER1, HAL_TIMER_IrqHandler, &g_timer1); + + HAL_TIMER_RegisterCallback(&g_timer1, TIMER_PERIOD_FIN, MotorStatemachineCallBack); + IRQ_SetPriority(IRQ_TIMER1, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_TIMER1); +} + +__weak void UART0InterruptErrorCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_TRNS_IT_ERROR */ + /* USER CODE END UART0_TRNS_IT_ERROR */ +} + +__weak void UART0_TXDMACallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_WRITE_DMA_FINISH */ + /* USER CODE END UART0_WRITE_DMA_FINISH */ +} + +__weak void UART0WriteInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_WRITE_IT_FINISH */ + /* USER CODE END UART0_WRITE_IT_FINISH */ +} + +__weak void UART0ReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_READ_IT_FINISH */ + /* USER CODE END UART0_READ_IT_FINISH */ +} + +static void UART0_Init(void) +{ + HAL_CRG_IpEnableSet(UART0_BASE, IP_CLK_ENABLE); /* UART0 clock enable. */ + g_uart0.baseAddress = UART0; + + g_uart0.baudRate = UART0_BAUD_RATE; + g_uart0.dataLength = UART_DATALENGTH_8BIT; + g_uart0.stopBits = UART_STOPBITS_ONE; + g_uart0.parity = UART_PARITY_NONE; + g_uart0.txMode = UART_MODE_DMA; + g_uart0.rxMode = UART_MODE_INTERRUPT; + g_uart0.fifoMode = BASE_CFG_ENABLE; + g_uart0.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart0.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart0.hwFlowCtr = BASE_CFG_DISABLE; + g_uart0.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart0.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart0); + HAL_UART_RegisterCallBack(&g_uart0, UART_TRNS_IT_ERROR, (UART_CallbackType)UART0InterruptErrorCallback); + HAL_UART_RegisterCallBack(&g_uart0, UART_READ_IT_FINISH, (UART_CallbackType)UART0ReadInterruptCallback); + IRQ_Register(IRQ_UART0, HAL_UART_IrqHandler, &g_uart0); + IRQ_SetPriority(IRQ_UART0, 6); /* 6 is priority value */ + IRQ_EnableN(IRQ_UART0); + g_uart0.dmaHandle = &g_dmac; + g_uart0.uartDmaTxChn = 0; + HAL_UART_RegisterCallBack(&g_uart0, UART_WRITE_DMA_FINISH, (UART_CallbackType)UART0_TXDMACallback); + HAL_UART_RegisterCallBack(&g_uart0, UART_WRITE_IT_FINISH, (UART_CallbackType)UART0WriteInterruptCallback); +} + +static void IOConfig(void) +{ + SYSCTRL0->SC_SYS_STAT.BIT.update_mode = 0; + SYSCTRL0->SC_SYS_STAT.BIT.update_mode_clear = 1; + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN1 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_7_AS_ACMP0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_7_AS_ACMP0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_7_AS_ACMP0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_7_AS_ACMP0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_7_AS_ACMP0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN48 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_6_AS_ACMP_N2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_6_AS_ACMP_N2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_6_AS_ACMP_N2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_6_AS_ACMP_N2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_6_AS_ACMP_N2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN47 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_5_AS_ACMP_P2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_5_AS_ACMP_P2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_5_AS_ACMP_P2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_5_AS_ACMP_P2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_5_AS_ACMP_P2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN4 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_6_AS_PGA0_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_6_AS_PGA0_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_6_AS_PGA0_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_6_AS_PGA0_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_6_AS_PGA0_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN5 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_5_AS_PGA0_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_5_AS_PGA0_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_5_AS_PGA0_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_5_AS_PGA0_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_5_AS_PGA0_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN3 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_7_AS_PGA0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_7_AS_PGA0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_7_AS_PGA0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_7_AS_PGA0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_7_AS_PGA0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN7 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_7_AS_ADC_AIN9); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_7_AS_ADC_AIN9, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_7_AS_ADC_AIN9, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_7_AS_ADC_AIN9, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_7_AS_ADC_AIN9, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN2 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO5_1_AS_ADC_AIN5); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO5_1_AS_ADC_AIN5, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO5_1_AS_ADC_AIN5, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO5_1_AS_ADC_AIN5, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO5_1_AS_ADC_AIN5, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN14 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_7_AS_ADC_AIN15); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_7_AS_ADC_AIN15, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_7_AS_ADC_AIN15, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_7_AS_ADC_AIN15, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_7_AS_ADC_AIN15, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN11 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_5_AS_PGA1_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_5_AS_PGA1_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_5_AS_PGA1_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_5_AS_PGA1_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_5_AS_PGA1_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN12 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_6_AS_PGA1_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_6_AS_PGA1_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_6_AS_PGA1_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_6_AS_PGA1_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_6_AS_PGA1_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN13 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_7_AS_PGA1_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_7_AS_PGA1_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_7_AS_PGA1_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_7_AS_PGA1_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_7_AS_PGA1_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN35 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_3_AS_GPIO2_3); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_3_AS_GPIO2_3, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_3_AS_GPIO2_3, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_3_AS_GPIO2_3, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_3_AS_GPIO2_3, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN27 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_0_AS_GPIO1_0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_0_AS_GPIO1_0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_0_AS_GPIO1_0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_0_AS_GPIO1_0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_0_AS_GPIO1_0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN41 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_4_AS_GPIO2_4); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_4_AS_GPIO2_4, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_4_AS_GPIO2_4, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_4_AS_GPIO2_4, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_4_AS_GPIO2_4, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN19 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_0_AS_APT0_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_0_AS_APT0_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_0_AS_APT0_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_0_AS_APT0_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_0_AS_APT0_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN23 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_0_AS_APT0_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_0_AS_APT0_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_0_AS_APT0_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_0_AS_APT0_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_0_AS_APT0_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN20 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_1_AS_APT1_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_1_AS_APT1_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_1_AS_APT1_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_1_AS_APT1_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_1_AS_APT1_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN24 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_1_AS_APT1_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_1_AS_APT1_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_1_AS_APT1_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_1_AS_APT1_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_1_AS_APT1_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN21 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_2_AS_APT2_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_2_AS_APT2_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_2_AS_APT2_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_2_AS_APT2_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_2_AS_APT2_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN25 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_2_AS_APT2_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_2_AS_APT2_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_2_AS_APT2_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_2_AS_APT2_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_2_AS_APT2_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ +} + +static void APT_SyncMasterInit(void) +{ + HAL_APT_MasterSyncInit(&g_apt0, APT_SYNC_OUT_ON_CNTR_ZERO); +} + +static void APT_SyncSlaveInit(void) +{ + APT_SlaveSyncIn aptSlave; + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt1, &aptSlave); + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt2, &aptSlave); + +} + +void SystemInit(void) +{ + IOConfig(); + DMA_Init(); + UART0_Init(); + ACMP0_Init(); + APT0_Init(); + APT1_Init(); + APT2_Init(); + ADC0_Init(); + PGA0_Init(); + PGA1_Init(); + TIMER0_Init(); + TIMER1_Init(); + GPIO_Init(); + + APT_SyncMasterInit(); + APT_SyncSlaveInit(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/main.c b/vendor/yibaina_3061M/1025_FOC/user/main.c new file mode 100644 index 00000000..1dfa2fc3 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/main.c @@ -0,0 +1,71 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + * @date 2025-04-17 14:22:06 + */ + +#include "typedefs.h" +#include "feature.h" +#include "mcs_motor_process.h" +#include "main.h" +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ +/* USER CODE END 0 */ +ACMP_Handle g_acmp0; +PGA_Handle g_pga0; +PGA_Handle g_pga1; +TIMER_Handle g_timer0; +TIMER_Handle g_timer1; +UART_Handle g_uart0; +APT_Handle g_apt0; +APT_Handle g_apt1; +APT_Handle g_apt2; +ADC_Handle g_adc0; +DMA_Handle g_dmac; +GPIO_Handle g_gpio2; +GPIO_Handle g_gpio1; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ +/* USER CODE END 1 */ + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + /* USER CODE END 2 */ + MotorMainProcess(); + /* USER CODE BEGIN 3 */ + /* 建议用户放置初始配置代码 */ + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + /* 建议用户放置周期性执行代码 */ + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h new file mode 100644 index 00000000..dea3ad66 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h @@ -0,0 +1,142 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration for carrier interrupt processing function. + */ +#ifndef McuMagicTag_MCS_CARRIER_H +#define McuMagicTag_MCS_CARRIER_H + +#include "mcs_status.h" +#include "mcs_mtr_param.h" +#include "mcs_svpwm.h" +#include "mcs_curr_ctrl.h" +#include "mcs_if_ctrl.h" +#include "mcs_ramp_mgmt.h" +#include "mcs_spd_ctrl.h" +#include "mcs_fosmo.h" +#include "mcs_smo_4th.h" +#include "mcs_pll.h" +#include "mcs_startup.h" +#include "mcs_r1_svpwm.h" +#include "mcs_fw_ctrl.h" +#include "mcs_prot_user.h" + +typedef void (*MCS_ReadCurrUvwCb)(UvwAxis *CurrUvw); +typedef void (*MCS_SetPwmDutyCb)(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight); +typedef void (*MCS_SetADCTriggerTimeCb)(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB); + +/** + * @brief motor control FSM state define. + * @details motor control FSM state type: + * + FSM_IDLE -- IDLE state, system startup default. + * + FSM_OFFSET_CALIB -- Self calibrate, for ADC init. + * + FSM_CAP_CHARGE -- IPM cap charge. + * + FSM_CLEAR -- Clear before every run. + * + FSM_LOCATE -- Rotor position pre-locate. + * + FSM_STARTUP -- Start up. + * + FSM_SWITCH -- Transition state, control from open to closed loop. + * + FSM_RUN -- Normal running state. + * + FSM_WAIT_STOP -- Wait stopping. + * + FSM_STOP -- Normal stop. + * + FSM_FAULT -- Fault state, waiting for user process. + */ +typedef enum { + FSM_IDLE = 0, + FSM_OFFSET_CALIB, + FSM_CAP_CHARGE, + FSM_CLEAR, + FSM_LOCATE, + FSM_STARTUP, + FSM_SWITCH, + FSM_RUN, + FSM_WAIT_STOP, + FSM_STOP, + FSM_FAULT +} FsmState; + +/** + * @brief Sampling mode. + */ +typedef enum { + DUAL_RESISTORS = 0, + SINGLE_RESISTOR = 1 +} SampleMode; + +/** + * @brief Motor control data structure + */ +typedef struct { + unsigned char motorStateFlag; /**< Motor start/stop status flag. */ + float spdCmdHz; /**< External input speed command value. */ + float axisAngle; /**< Angle of the synchronous coordinate system. */ + float spdRefHz; /**< Command value after speed ramp management. */ + float currCtrlPeriod; /**< current loop control period. */ + float adc0Compensate; /**< ADC0 softwaretrim compensate value. */ + float adc1Compensate; /**< ADC1 softwaretrim compensate value. */ + float udc; /**< Bus voltage. */ + float powerBoardTemp; /**< Power boart surface temperature. */ + unsigned short aptMaxcntCmp; /**< Apt Maximum Comparison Count. */ + float adcCurrCofe; /**< Adc current sampling cofeature. */ + + unsigned short sysTickCnt; /**< System Timer Tick Count. */ + unsigned short capChargeTickNum; /**< Bootstrap Capacitor Charge Tick Count. */ + volatile unsigned int msTickCnt; /**< Millisecond-level counter, which can be used in 1-ms and 5-ms tasks. */ + unsigned short msTickNum; /**< Number of ticks corresponding to 1 ms. */ + char obserType; /**< Set Observer Type. */ + char controlMode; /**< Set foc control or sixstep bldc control mode or others. */ + char spdAdjustMode; /**< Set speed adjust mode. */ + char uartConnectFlag; /**< Uart connect success flag. */ + short uartHeartDetCnt; /**< Uart connect heart detect count. */ + float uartTimeStamp; /**< Uart data time stamp. */ + SysStatusReg statusReg; /**< System status. */ + FsmState stateMachine; /**< Motor Control State Machine. */ + + SampleMode sampleMode; /**< Current sampling mode setting: single resistor, double resistor. */ + MOTOR_Param mtrParam; /**< Motor parameters. */ + FOSMO_Handle smo; /**< SMO observer handle. */ + SMO4TH_Handle smo4th; /**< SMO 4th observer handle. */ + IF_Handle ifCtrl; /**< I/F control handle. */ + SVPWM_Handle sv; /**< Dual-resistance/three-resistance sampling SVPWM Handle. */ + R1SVPWM_Handle r1Sv; /**< Single-resistance phase-shifted SVPWM handle. */ + RMG_Handle spdRmg; /**< Ramp management struct for the speed controller input reference. */ + SPDCTRL_Handle spdCtrl; /**< Speed loop Control Handle. */ + CURRCTRL_Handle currCtrl; /**< Current loop control handle. */ + STARTUP_Handle startup; /**< Startup Switch Handle. */ + FW_Handle fw; /**< Flux-Weakening Handle. */ + + DqAxis idqRef; /**< Command value of the dq axis current. */ + UvwAxis currUvw; /**< Three-phase current sampling value. */ + AlbeAxis iabFbk; /**< αβ-axis current feedback value. */ + DqAxis idqFbk; /**< Current feedback value of the dq axis. */ + DqAxis vdqRef; /**< Current loop output dq voltage. */ + AlbeAxis vabRef; /**< Current loop output voltage αβ. */ + UvwAxis dutyUvw; /**< UVW three-phase duty cycle. */ + UvwAxis dutyUvwLeft; /**< Single Resistor UVW Three-Phase Left Duty Cycle. */ + UvwAxis dutyUvwRight; /**< Single Resistor UVW Three-Phase Right Duty Cycle. */ + + MCS_ReadCurrUvwCb readCurrUvwCb; /**< Read current callback function. */ + MCS_SetPwmDutyCb setPwmDutyCb; /**< Set the duty cycle callback function. */ + MCS_SetADCTriggerTimeCb setADCTriggerTimeCb; /**< Sets the ADC trigger point callback function. */ + + MotorProtStatus_Handle prot; /**< Motor protect status detection flag bit handle. */ +} MTRCTRL_Handle; + +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h new file mode 100644 index 00000000..38c00b5d --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h @@ -0,0 +1,76 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_chip_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H/ECBMCU201MPC app. + */ + +#ifndef McuMagicTag_MCS_CHIPCONFIG_H +#define McuMagicTag_MCS_CHIPCONFIG_H + +#include "feature.h" + +#if defined (CHIP_3061MNPICA) || defined (CHIP_3061MNPIKA) || defined (CHIP_3061MNNICA) || \ + defined (CHIP_3061MNNIKA) || defined (CHIP_3061MNPIC8) || defined(CHIP_3061MNNIC8) || \ + defined (CHIP_3061MNPIK8) || defined (CHIP_3061MNNIK8) + + #define ADCPTT_HANDLE g_adc0 + #define ADCRESIS_HANDLE g_adc0 + #define ADCUDC_HANDLE g_adc0 + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc0 + #define LED1_HANDLE g_gpio2 + #define LED2_HANDLE g_gpio1 + #define LED2_PIN GPIO_PIN_0 + #define LED1_PIN GPIO_PIN_3 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCUSOCNUM ADC_SOC_NUM1 + #define ADCRESISSOCNUM ADC_SOC_NUM3 + #define ADCUDCSOCNUM ADC_SOC_NUM4 + #define ADCWSOCNUM ADC_SOC_NUM6 + + #define ADC0COMPENSATE 2037.0f + #define ADC1COMPENSATE 2027.0f + +#endif + +#if defined (CHIP_3065HRPIRZ) || defined (CHIP_3065ARPIRZ) || defined (CHIP_3066MNPIRH) || \ + defined (CHIP_3065PNPIRH) || defined (CHIP_3065PNPIRE) || defined (CHIP_3065PNPIRA) + + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc1 + #define ADCRESIS_HANDLE g_adc2 + #define ADCUDC_HANDLE g_adc2 + #define ADCPTT_HANDLE g_adc2 + #define LED1_HANDLE g_gpio0 + #define LED2_HANDLE g_gpio0 + #define LED2_PIN GPIO_PIN_6 + #define LED1_PIN GPIO_PIN_7 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCRESISSOCNUM ADC_SOC_NUM1 + #define ADCUSOCNUM ADC_SOC_NUM8 + #define ADCWSOCNUM ADC_SOC_NUM8 + #define ADCUDCSOCNUM ADC_SOC_NUM14 + + #define ADC0COMPENSATE 2033.0f + #define ADC1COMPENSATE 2070.0f + +#endif + + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h new file mode 100644 index 00000000..2a6f38cc --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h @@ -0,0 +1,73 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_ctlmode_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H app. + */ + + /* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_CTLMODECONFIG_H +#define McuMagicTag_MCS_CTLMODECONFIG_H + +#include "debug.h" +#include "typedefs.h" + +typedef enum { + FOC_STARTUP_IF = 0, + FOC_STARTUP_VF, + FOC_STARTUP_HFI +} MOTOR_STARTUPMODE_CONFIG; + +typedef enum { + FOC_OBSERVERTYPE_SMO1TH = 0, + FOC_OBSERVERTYPE_SMO1TH_PLL, + FOC_OBSERVERTYPE_SMO4TH, + FOC_OBSERVERTYPE_SMO4TH_PLL, + FOC_OBSERVERTYPE_LUNBORG, + FOC_OBSERVERTYPE_FLUX +} MOTOR_OBSERVERTYPE_CONFIG; + +typedef enum { + FOC_CONTROLMODE_SPEED = 0, + FOC_CONTROLMODE_TORQUE +} MOTOR_CONTROLMODE_CONFIG; + +typedef enum { + FOC_CURQAXISPID_PARAMS = 0, + FOC_CURDAXISPID_PARAMS, + FOC_SPDPID_PARAMS +} MOTOR_PID_SET; + +typedef enum { + MOTOR_PARAMS_BASE = 0, + MOTOR_PARAMS_SPECIAL, + MOTOR_PARAMS_BOARD +} MOTOR_PARAMS_SET; + +typedef enum { + CUST_SPEED_ADJUST = 0, + HOST_SPEED_ADJUST +} MODE_ADSPEED_CONFIG; + +typedef enum { + CONNECTING = 0, + CONNECTED, + DISCONNECT +} UART_STATUS; + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/demo/sample_gpio_key/gpio_key_sample.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h similarity index 76% rename from vendor/yibaina_3061M/demo/sample_gpio_key/gpio_key_sample.h rename to vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h index 17ff5146..783bf214 100644 --- a/vendor/yibaina_3061M/demo/sample_gpio_key/gpio_key_sample.h +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h @@ -1,30 +1,45 @@ -/** - * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the - * following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the - * following disclaimer in the documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * @file gpio_key_sample.h - * @author MCU Driver Team - * @brief GPIO module sample - * @details This file provides sample code for users to help use - * the trigger an interrupt based on the key connected to the GPIO. - */ - -#ifndef GPIO_KEY_SAMPLE_H -#define GPIO_KEY_SAMPLE_H - -BASE_StatusType GPIO_KeySample(void); - -#endif /* GPIO_KEY_SAMPLE_H */ \ No newline at end of file +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.h + * @author MCU Algorithm Team + * @brief This file provides motor sample functions declaration for ECMCU105H board. + */ +#ifndef McuMagicTag_MCS_MOTOR_PROCESS_H +#define McuMagicTag_MCS_MOTOR_PROCESS_H + +/** + * @brief phase sequence. + */ +typedef enum { + PHASE_U = 0, + PHASE_V, + PHASE_W, + PHASE_MAX_NUM +} MCS_PhaseEnum; + +/** + * @brief key state. + */ +typedef enum { + KEY_DOWN = 0, + KEY_UP = 1, +} KEY_State; + +int MotorMainProcess(void); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h new file mode 100644 index 00000000..19510c78 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h @@ -0,0 +1,188 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_status.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_STATUS_H +#define McuMagicTag_MCS_STATUS_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "typedefs.h" +#include "mcs_assert.h" + +/* Typedef definitions ------------------------------------------------------------------------- */ +/** + * @brief System status define + */ +typedef union { + unsigned short all; + struct { + unsigned short cmdStart : 1; /**< Indicates that a start system command has been received. */ + unsigned short cmdStop : 1; /**< Indicates that a stop system command has been received. */ + unsigned short isRunning : 1; /**< Indicates that the system is running (enable signal) */ + unsigned short sysError : 1; /**< Indicates that the system reports an error. */ + unsigned short poweron : 1; /**< Indicates that the power-on initialization phase is complete. */ + unsigned short capcharge : 1; /**< Indicates that the bootstrap capacitor charging phase is complete. */ + unsigned short adczero : 1; /**< The current sampling point is reset to zero after power-on. */ + } Bit; +} SysStatusReg; + +/** + * @brief Get status of Bit cmdStart. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStart(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStart == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStart. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStartSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 1; +} + +/** + * @brief Clear Bit cmdStart. + * @param handle System status register handle. + * @retval None. + */ +static inline void SysCmdStartClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 0; +} + +/** + * @brief Get status of Bit cmdStop. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStop(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStop == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 1; +} + +/** + * @brief Clear Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 0; +} + +/** + * @brief Get status of Bit isRunning. + * @param sysStatus System status register handle. + * @retval Status of Bit isRunning. + */ +static inline bool SysIsRunning(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.isRunning == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 1; +} + +/** + * @brief Clear Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 0; +} + +/** + * @brief Get status of Bit sysError. + * @param sysStatus System status register handle. + * @retval Status of Bit sysError. + */ +static inline bool SysIsError(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.sysError == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 1; +} + +/** + * @brief Clear Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 0; +} + +#endif diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h new file mode 100644 index 00000000..0b9c66a6 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h @@ -0,0 +1,121 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_user_config.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of user config parameters. + */ +#ifndef McuMagicTag_MCS_CONFIG_H +#define McuMagicTag_MCS_CONFIG_H + +#include "debug.h" +#include "typedefs.h" + +#define SMO4TH + +#define SYSTICK_PERIOD_US 500u /* systick period. */ + +#define INV_CAP_CHARGE_MS 3u /* Capacitor charging time. */ + +#define INV_VOLTAGE_BUS 24.0f /* Bus voltage, V. */ + +#define CTRL_CURR_PERIOD 0.0001f /* carrier ISR period, 100us. */ +#define CTRL_SYSTICK_PERIOD 0.0005f /* systick control period, 500us. */ + +/* Duty of sample window, the real time is 0.06*50us = 3us. */ +#define SAMPLE_WINDOW_DUTY 0.06f + +/* Duty of sample point shift as flip point, the real time is 0.008*50us = 0.4us. */ +#define SAMPLE_POINT_SHIFT 0.008f + +/* Sampling resistance 200mOhm 0.0013295 */ +#define ADC_CURR_COFFI 0.0013295f /* 3.3/4096/3.03/0.2 pga: 3.03, 200mohm. */ + +#define APT_U APT0_BASE /* Base address of U phase APT module. */ +#define APT_V APT1_BASE /* Base address of V phase APT module. */ +#define APT_W APT2_BASE /* Base address of W phase APT module. */ + +/* FOSMO */ +#define FOSMO_GAIN 4.0f /* SMO gain */ +#define FOSMO_LAMBDA 2.0f /* SMO coefficient of cut-off frequency, its value = lambda * we. */ +#define FOSMO_EMF_CUTOFF_FREQ 2.0f /* SMO back emf cutoff frequency. */ +#define SPEED_FILTER_CUTOFF_FREQUENCY 40.0f /* SMO speed cutoff frequency of speed filter. */ +#define FOSMO_PLL_BDW 30.0f /* SMO PLL bandwidth. */ + +/* SMO4TH */ +#define SMO4TH_PLL_BDW 30.0f /* SMO4TH PLL Bandwidth. */ +#define SMO4TH_KD 300.0f /* SMO4TH parameters KD. */ +#define SMO4TH_KQ 600.0f /* SMO4TH parameters KQ. */ +#define SMO4TH_SPD_FILTER_CUTOFF_FREQ 40.0f /* SMO4TH speed cutoff frequency of speed filter. */ + +/* User_Commond */ +#define CTRL_IF_CURR_AMP_A 0.8f /* IF control current amplitude. */ +#define USER_TARGET_SPD_HZ 100.0f /* User-defined target speed value. */ +#define USER_SWITCH_SPDBEGIN_HZ 30.0f /* Start of handover interval. */ +#define USER_SWITCH_SPDEND_HZ (USER_SWITCH_SPDBEGIN_HZ + 3.0f) /* End of handover period. */ +#define USER_MAX_SPD_HZ 29.0f /* User-defined maximum speed value. */ +#define USER_MIN_SPD_HZ 1.0f /* User-defined minimum speed value. */ +#define USER_SPD_SLOPE 50.0f /* slope of velocity change. */ +#define USER_CURR_SLOPE (CTRL_IF_CURR_AMP_A * 10.0f) /* Current change slope. */ + +/* PID PARAMS */ +#define CURRQAXIS_KP 5.023202f /* Current loop Q axis Kp. */ +#define CURRQAXIS_KI 20612.84f /* Current loop Q axis Ki. */ +#define CURRDAXIS_KP 3.477114f /* Current loop D axis Kp. */ +#define CURRDAXIS_KI 20612.84f /* Current loop D axis Ki. */ +/* Current loop PID output lower limit. */ +#define CURR_LOWERLIM (-INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.98f) +/* Current loop PID output upper limit. */ +#define CURR_UPPERLIM (INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.98f) + +#define SPD_KP 0.00505f /* Speed loop Kp. */ +#define SPD_KI 0.012f /* Speed loop Ki. */ +#define SPD_LOWERLIM (-0.105f) /* Speed loop PID output lower limit. */ +#define SPD_UPPERLIM 0.105f /* Speed loop PID output upper limit. */ + +/* MOTOR PARAMS */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift. */ +/* mtrPsif & mtrJ parameter is not used in this project, temporarily set to 0. */ +// #define MOTORPARAM_DEFAULTS { \ +// .mtrNp = 7, \ +// .mtrRs = 5.1f, \ +// .mtrLd = 0.00133f, \ +// .mtrLq = 0.00133f, \ +// .mtrPsif = 0.0f, \ +// .mtrJ = 0.0f, \ +// .maxElecSpd = 180.25f, \ +// .maxCurr = 0.105f, \ +// .busVolt = INV_VOLTAGE_BUS, \ +// } + +#define MOTORPARAM_DEFAULTS { \ + .mtrNp = 21, \ + .mtrRs = 2.5f, \ + .mtrLd = 0.066f, \ + .mtrLq = 0.066f, \ + .mtrPsif = 0.0f, \ + .mtrJ = 0.0f, \ + .maxElecSpd = 49.0f, \ + .maxCurr = 0.8f, \ + .busVolt = INV_VOLTAGE_BUS, \ +} + + +/* Bus voltage sampling conversion factor. */ +#define ADC_UDC_COFFI 0.01289f /* 0.01289 = 3.3/4096*192/12. */ + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c new file mode 100644 index 00000000..99766bdf --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c @@ -0,0 +1,43 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.c + * @author MCU Algorithm Team + * @brief This file contains protection common api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt.h" +#include "mcs_assert.h" + +/** + * @brief Safty-pulse-off function execution to turn off all the power devices. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void ProtSpo_Exec(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /**< Turn off all the six power devices of the inverter. */ + for (unsigned int i = 0; i < MOTOR_PHASE_NUMBER; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_ForcePWMOutputLow(aptx); + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h new file mode 100644 index 00000000..104a5dec --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h @@ -0,0 +1,136 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.h + * @author MCU Algorithm Team + * @brief This file contains protection function common data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_CMM_H +#define McuMagicTag_MCS_PROT_CMM_H + +#include "typedefs.h" +#include "apt_ip.h" + +/* Macro definitions --------------------------------------------------------------------------- */ +#define MOTOR_PHASE_NUMBER (3) + +#define PROT_VAL_THRESHOLD_NUMS (4) +#define PROT_VAL_THRESHOLD_0 (0) +#define PROT_VAL_THRESHOLD_1 (1) +#define PROT_VAL_THRESHOLD_2 (2) +#define PROT_VAL_THRESHOLD_3 (3) + +#define PROT_LIMIT_TIME_NUMS (3) +#define PROT_LIMIT_TIME_0 (0) +#define PROT_LIMIT_TIME_1 (1) +#define PROT_LIMIT_TIME_2 (2) + +#define MOTOR_PHASE_NUMBER (3) + +/**< Motor error status definition. */ +typedef union { + int all; + struct { + unsigned short overCurrErr : 1; /**< Indicates that phase current(s) is over protected value. */ + unsigned short overVoltErr : 1; /**< Indicates that dc-link voltage is over protected value. */ + unsigned short lowerVoltErr : 1; /**< Indicates that dc-link voltage is lower than protected value */ + unsigned short overIpmTempErr : 1; /**< Indicates that IPM temperature is over protected value. */ + unsigned short revRotErr : 1; /**< Indicates that motor negtive direction. */ + unsigned short motorStalling : 1; /**< Indicates that rotor is stalling. */ + unsigned short overMotorTempErr : 1; /**< Indicates that three phase currents is out-of-balance. */ + unsigned short posSnsrCommsErr : 1; /**< Indicates that position sensor communication is lost with MCU. */ + unsigned short posSnsrFuncErr : 1; /**< Indicates that position sensor reports function error. */ + unsigned short posSnsrCalibrErr : 1; /**< Indicates that position sensor fails to calibrate itself. */ + unsigned short currOutOfBalance : 1; /**< Indicates that the rotor is reverse rotation.*/ + unsigned short phsOpenErr : 1; /**< Indicates that phase winding(s) is open. */ + unsigned short phsU : 1; /**< Indicates that u phase fails when phsOpenErr occurs. */ + unsigned short phsV : 1; /**< Indicates that v phase fails when phsOpenErr occurs. */ + unsigned short phsW : 1; /**< Indicates that w phase fails when phsOpenErr occurs. */ + unsigned short multiPhs : 1; /**< Indicates that multi-phases fail when phsOpenErr occurs.*/ + } Bit; +} MotorErrStatusReg; + +/**< Protection Status Bit Definition */ +typedef enum { + OCP_ERR_BIT, + OVP_ERR_BIT, + LVP_ERR_BIT, + OTP_IPM_ERR_BIT, + OTP_MOTOR_ERR_BIT, + STALLING_ERR_BIT, + CURR_OUT_BALANCE_ERR_BIT, + POS_COMMS_ERR_BIT, + POS_FUNC_ERR_BIT, + POS_CALIB_ERR_BIT, + REV_ROT_ERR_BIT, + PHS_OPEN_ERR_BIT, + PHS_U_ERR_BIT, + PHS_V_ERR_BIT, + PHS_W_ERR_BIT, + PHS_MULTI_ERR_BIT, +} PROT_ErrBit; + +/**< Motor error protection level. */ +typedef enum { + PROT_LEVEL_0 = 0, + PROT_LEVEL_1, + PROT_LEVEL_2, + PROT_LEVEL_3, + PROT_LEVEL_4 /**< The greater level number, the severe error is. */ +} PROT_Level; + +/** + * @brief Obtains the status of a bit of data. + * @param data data. + * @param bits Number of digits. + * @retval Bit status. + */ +static inline bool GetBit(int data, unsigned short bit) +{ + bool ret; + ret = ((data >> bit) & 1); + return ret; +} + +/** + * @brief Sets the status of a bit of data. + * @param data data. + * @param bit The setted bit. + * @retval None. + */ +static inline void SetBit(int *data, unsigned char bit) +{ + *data |= (1 << bit); +} + +/** + * @brief Clear the status of a bit of data. + * @param data data. + * @param bit The Clear bit. + * @retval None. + */ +static inline void ClearBit(int *data, unsigned char bit) +{ + *data &= ~(1 << bit); +} + +/**< Protection action. */ +void ProtSpo_Exec(APT_RegStruct **aptAddr); + +#endif diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c new file mode 100644 index 00000000..e97876b7 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c @@ -0,0 +1,137 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.c + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Get motor over current error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overCurrErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor lower dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.lowerVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Ipm temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overIpmTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Motor temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overMotorTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor stalling error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.motorStalling) { + return true; + } else { + return false; + } +} + +/** + * @brief Clear the motor error status. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + /* Clear the motor error status. */ + motorProt->motorErrStatus.all = 0x00; + OCP_Clear(&motorProt->ocp); + OVP_Clear(&motorProt->ovp); + LVP_Clear(&motorProt->lvp); + OTP_Clear(&motorProt->otp); +} + +/** + * @brief Motor protection function initialization. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void MotorProt_Init(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + motorProt->motorErrStatus.all = 0x00; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h new file mode 100644 index 00000000..365110e1 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h @@ -0,0 +1,54 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.h + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_H +#define McuMagicTag_MCS_PROT_USER_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_curr_prot.h" +#include "mcs_dc_volt_prot.h" +#include "mcs_temp_prot.h" +#include "mcs_motor_stalling.h" +#include "typedefs.h" + +typedef struct { + MotorErrStatusReg motorErrStatus; /**< Motor error status. */ + OCP_Handle ocp; /**< Over current protection. */ + OVP_Handle ovp; /**< Over dc-link voltage protection. */ + LVP_Handle lvp; /**< Lower dc-link voltage protection. */ + OTP_Handle otp; /**< Over IPM temperature protection. */ + STP_Handle stall; /**< Motor stalling protection. */ +} MotorProtStatus_Handle; + +void MotorProt_Init(MotorProtStatus_Handle *motorProt); + +/**< Inquiry motor error status */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus); +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus); +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h new file mode 100644 index 00000000..832cd1be --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h @@ -0,0 +1,125 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user_config.h + * @author MCU Algorithm Team + * @brief This file contans user macro definition of the protection function. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_CONFIG_H +#define McuMagicTag_MCS_PROT_USER_CONFIG_H + +/* Macro definitions --------------------------------------------------------------------------- */ +/**< COMMON */ +/**< Peak phase current (A) of the motor or IPM under continuous operations. */ +#define PROT_MOTOR_RATED_CURR (1.0f) +/**< Only several continuous fault detection can trigger error status. */ +#define PROT_CNT_LIMIT (100) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define RECY_CNT_LIMIT (10000) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define OVER_VOLT_RECY_CNT_LIMIT (100) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define LOWER_VOLT_RECY_CNT_LIMIT (100) + +/**< Over current protection */ +/**< Over current trigger value (A) when in level 1. */ +#define PROT_OVER_CURR_POW_DN1 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 2. */ +#define PROT_OVER_CURR_POW_DN2 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 3. */ +#define PROT_OVER_CURR_POW_DN3 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 4. */ +#define PROT_OVER_CURR_POW_OFF (2.0f * PROT_MOTOR_RATED_CURR) +#define PROT_OVER_CURR_RECY_DELTA (0.0035f) /**< Current gap (A) when recovers from protection status. */ +#define PROT_OVER_CURR_LIMIT1_TIME_SEC (30.0f) /**< 20% overload can last maximum time: 30 sec. */ +#define PROT_OVER_CURR_LIMIT2_TIME_SEC (10.0f) /**< 20% overload can last maximum time: 10 sec. */ +#define PROT_OVER_CURR_LIMIT3_TIME_SEC (2.0f) /**< 20% overload can last maximum time: 2 sec. */ + +/**< Over voltage protection */ +#define PROT_OVER_VOLT_BRK_ON1 (26.0f) /**<处于1级时,直流链路电压触发值(V)过高*/ +#define PROT_OVER_VOLT_BRK_ON2 (27.0f) /**< Over dc-link voltage trigger value (V) when in level 2. */ +#define PROT_OVER_VOLT_BRK_ON3 (28.0f) /**< Over dc-link voltage trigger value (V) when in level 3. */ +#define PROT_OVER_VOLT_BRK_ALL (30.0f) /**< Over dc-link voltage trigger value (V) when in level 4. */ +#define PROT_OVER_VOLT_RECY_DELTA (0.5f) /**<从保护状态恢复时的电压间隙(V)*/ +#define PROT_OVER_VOLT_LIMIT1_TIME_SEC (5.0f) /** 1; One-cycle mode: < 0.5 */ +#define POS_SNSR_IPD_INJ_PERIOD (4) + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c new file mode 100644 index 00000000..da4e56f8 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c @@ -0,0 +1,267 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.c + * @author MCU Algorithm Team + * @brief This file contains current protecion api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_curr_prot.h" +#include "mcs_math.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over current protection function. + * @param ocp Over current protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OCP_Init(OCP_Handle *ocp, float ts) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ocp->ts = ts; + OCP_Clear(ocp); + + ocp->protCntLimit = PROT_CNT_LIMIT; + ocp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring four levels of current protection thresholds. */ + ocp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_CURR_POW_DN1; + ocp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_CURR_POW_DN2; + ocp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_CURR_POW_DN3; + ocp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_CURR_POW_OFF; + /* Configure the protection limit time. */ + ocp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_CURR_LIMIT1_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_CURR_LIMIT2_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_CURR_LIMIT3_TIME_SEC; + ocp->recyDelta = PROT_OVER_CURR_RECY_DELTA; +} + +/** + * @brief Over current protection detection. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + /* Calculate current amplitude. */ + ocp->currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + + /* Check if value goes over threshold for continuous cycles. */ + if (ocp->currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0]) { + ocp->protCnt = 0; + return; + } + + if (ocp->protCnt < ocp->protCntLimit) { + ocp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_3] && ocp->protLevel < PROT_LEVEL_4) { + ocp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_2] && ocp->protLevel < PROT_LEVEL_3) { + ocp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_1] && ocp->protLevel < PROT_LEVEL_2) { + ocp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_0] && ocp->protLevel < PROT_LEVEL_1) { + ocp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } +} + +/** + * @brief Over current protection execution. + * @param ocp Over current protection handle. + * @param idqRef DQ-axis current references. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(idqRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + + float id = idqRef->d; + float iq = idqRef->q; + float idqAmp = ocp->currAmp; + /* According to protect level, take corresponding action. */ + switch (ocp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + idqRef->d = 0.0f; + idqRef->q = 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_2]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_1]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_0]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } +} + +/** + * @brief Over current protection recovery. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @retval None. + */ +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overCurrErr) { + return; + } + + /* Calculate current amplitude. */ + float currAmp = ocp->currAmp; + + /* According to protection level, take corresponding recovery action. */ + switch (ocp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_3] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_3; + ocp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_2] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_2; + ocp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_1] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_1; + ocp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + } + } + break; + + /* level 0 */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overCurrErr = 0; + break; + + default: + break; + } +} + +/** + * @brief Over current protection error status clear. + * @param ocp Over current protection handle. + * @retval None. + */ +void OCP_Clear(OCP_Handle *ocp) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* Clear the history value. */ + ocp->protCnt = 0; + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + ocp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h new file mode 100644 index 00000000..e9916fe4 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h @@ -0,0 +1,52 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.h + * @author MCU Algorithm Team + * @brief This file contains current protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_CURR_PROT_H +#define McuMagicTag_MCS_CURR_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_typedef.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float currAmp; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OCP_Handle; + +void OCP_Init(OCP_Handle *ocp, float ts); +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq); +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr); +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus); +void OCP_Clear(OCP_Handle *ocp); + +#endif diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c new file mode 100644 index 00000000..b0541a2e --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c @@ -0,0 +1,495 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.c + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection api declaration. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_dc_volt_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over dc-link voltage protection function. + * @param ovp Over dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OVP_Init(OVP_Handle *ovp, float ts) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ovp->ts = ts; + OVP_Clear(ovp); + ovp->protCntLimit = PROT_CNT_LIMIT; + ovp->recyCntLimit = OVER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of overvoltage protection thresholds. */ + ovp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_VOLT_BRK_ON1; + ovp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_VOLT_BRK_ON2; + ovp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_VOLT_BRK_ON3; + ovp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_VOLT_BRK_ALL; + /* Configure the protection limit time. */ + ovp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_VOLT_LIMIT1_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_VOLT_LIMIT2_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_VOLT_LIMIT3_TIME_SEC; + ovp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Initilization lower dc-link voltage protection function. + * @param lvp Lower dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void LVP_Init(LVP_Handle *lvp, float ts) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + + lvp->ts = ts; + LVP_Clear(lvp); + + lvp->protCntLimit = PROT_CNT_LIMIT; + lvp->recyCntLimit = LOWER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of lower voltage protection thresholds. */ + lvp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_LOWER_VOLT_POW_DN1; + lvp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_LOWER_VOLT_POW_DN2; + lvp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_LOWER_VOLT_POW_DN3; + lvp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_LOWER_VOLT_POW_OFF; + /* Configure the protection limit time. */ + lvp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_LOWER_VOLT_LIMIT1_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_LOWER_VOLT_LIMIT2_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_LOWER_VOLT_LIMIT3_TIME_SEC; + lvp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Over dc-link voltage protection detection. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0]) { + ovp->protCnt = 0; + return; + } + + if (ovp->protCnt < ovp->protCntLimit) { + ovp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_3] && ovp->protLevel < PROT_LEVEL_4) { + ovp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_2] && ovp->protLevel < PROT_LEVEL_3) { + ovp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_1] && ovp->protLevel < PROT_LEVEL_2) { + ovp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_0] && ovp->protLevel < PROT_LEVEL_1) { + ovp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } +} + +/** + * @brief Lower dc-link voltage protection detection. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0]) { + lvp->protCnt = 0; + return; + } + + if (lvp->protCnt < lvp->protCntLimit) { + lvp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_3] && lvp->protLevel < PROT_LEVEL_4) { + lvp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_2] && lvp->protLevel < PROT_LEVEL_3) { + lvp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_1] && lvp->protLevel < PROT_LEVEL_2) { + lvp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_0] && lvp->protLevel < PROT_LEVEL_1) { + lvp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } +} + +/** + * @brief Over dc-link voltage protection execution. + * @param ovp Over dc-link voltage protection handle. + * @param duty Brake loop output duty (0-1). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(duty != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (ovp->protLevel) { + /* level 4: brake loop duty maximum. */ + case PROT_LEVEL_4: + *duty = PROT_OVER_VOLT_BRK_DUTY4; + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + break; + + /* level 3: brake loop duty level 3. */ + case PROT_LEVEL_3: + *duty = PROT_OVER_VOLT_BRK_DUTY2; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_2]) { + *duty = PROT_OVER_VOLT_BRK_DUTY3; + } + break; + + /* level 2: brake loop duty level 2. */ + case PROT_LEVEL_2: + *duty = PROT_OVER_VOLT_BRK_DUTY1; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_1]) { + *duty = PROT_OVER_VOLT_BRK_DUTY2; + } + break; + + /* level 1: brake loop duty level 1. */ + case PROT_LEVEL_1: + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_0]) { + *duty = PROT_OVER_VOLT_BRK_DUTY1; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection execution. + * @param lvp Lower dc-link voltage protection handle. + * @param spdRef Speed Reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (lvp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + *spdRef *= PROT_POW_DN1_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_0]) { + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection recovery. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (ovp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_3] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_3; + ovp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is less than threshold 2, level-2 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_2] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_2; + ovp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is less than threshold 1, level-1 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_1] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_1; + ovp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is less than threshold 0, level-0 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection recovery. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.lowerVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (lvp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the dc-link voltage is greater than threshold 3, level-3 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_3] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_3; + lvp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is greater than threshold 2, level-2 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_2] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_2; + lvp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is greater than threshold 1, level-1 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_1] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_1; + lvp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is greater than threshold 0, level-0 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.lowerVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection error status clear. + * @param ovp Over voltage protection handle. + * @retval None. + */ +void OVP_Clear(OVP_Handle *ovp) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* Clear the history value. */ + ovp->protCnt = 0; + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + ovp->timer = 0.0f; +} + +/** + * @brief Lower dc-link voltage protection error status clear. + * @param lvp Lower voltage protection handle. + * @retval None. + */ +void LVP_Clear(LVP_Handle *lvp) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* Clear the history value. */ + lvp->protCnt = 0; + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + lvp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h new file mode 100644 index 00000000..0435156a --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h @@ -0,0 +1,69 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.h + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_DC_VOLT_PROT_H +#define McuMagicTag_MCS_DC_VOLT_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low voltage level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OVP_Handle; + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from high voltage level to low. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} LVP_Handle; + +void OVP_Init(OVP_Handle *ovp, float ts); +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr); +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Clear(OVP_Handle *ovp); + +void LVP_Init(LVP_Handle *lvp, float ts); +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr); +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Clear(LVP_Handle *lvp); + +#endif diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c new file mode 100644 index 00000000..9dee4d2d --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c @@ -0,0 +1,112 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.c + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_motor_stalling.h" +#include "mcs_prot_user_config.h" +#include "mcs_math.h" +#include "mcs_math_const.h" +#include "mcs_assert.h" + +/** + * @brief Initilization motor stalling protection function. + * @param stall Motor stalling handle. + * @param ts Ctrl period (s). + * @param currLimit The current amplitude that triggers fault. (A). + * @param spdLimit The speed amplitude that triggers fault. (Hz). + * @param timeLimit The threshold time that current amplitude over the limit (s). + * @retval None. + */ +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + MCS_ASSERT_PARAM(currLimit > 0.0f); + MCS_ASSERT_PARAM(spdLimit > 0.0f); + MCS_ASSERT_PARAM(timeLimit > 0.0f); + /* Configuring parameters for stalling detection. */ + stall->ts = ts; + /* Current threshold and speed threshold for stalling fault. */ + stall->currAmpLimit = currLimit; + stall->spdLimit = spdLimit; + stall->timeLimit = timeLimit; + stall->timer = 0.0f; +} + +/** + * @brief Motor stalling detection. + * @param stall Motor stalling handle. + * @param motorErrStatus Motor error status. + * @param spd Speed feedback (Hz). + * @param idq Dq-axis current feedback (A). + * @retval None. + */ +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(Abs(spd) >= 0.0f); + /* Calculate current amplitude. */ + float currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + float spdAbs = Abs(spd); + /* Check if value goes over threshold for continuous cycles. */ + if (currAmp < stall->currAmpLimit || spdAbs > stall->spdLimit) { + stall->timer = 0.0f; + return; + } + /* Time accumulation. */ + if (stall->timer < stall->timeLimit) { + stall->timer += stall->ts; + return; + } + motorErrStatus->Bit.motorStalling = 1; +} + +/** + * @brief Motor stalling protection execution. + * @param motorErrStatus Motor error status. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + if (motorErrStatus->Bit.motorStalling == 0) { + return; + } + + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + return; +} + +/** + * @brief Motor stalling protection error status clear. + * @param stall Motor stalling handle. + * @retval None. + */ +void STP_Clear(STP_Handle *stall) +{ + MCS_ASSERT_PARAM(stall != NULL); + stall->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h new file mode 100644 index 00000000..a1d1e4be --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h @@ -0,0 +1,45 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.h + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_MOTOR_STALLING_PROT_H +#define McuMagicTag_MCS_MOTOR_STALLING_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" +#include "mcs_typedef.h" + +typedef struct { + float currAmpLimit; /**< Feedback current higher than this value triggers fault. (A). */ + float spdLimit; /**< Feedback speed lower than this value triggers fault (Hz). */ + float timeLimit; /**< The threshold time that current and speed feedback over ranges (s). */ + float timer; /**< Timer to get speed and current over range time. */ + float ts; /**< Ctrl period (s). */ +} STP_Handle; + +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit); +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq); +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr); +void STP_Clear(STP_Handle *stall); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c new file mode 100644 index 00000000..184ba4a3 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c @@ -0,0 +1,262 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.c + * @author MCU Algorithm Team + * @brief This file contains over temperature protection api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_temp_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over temperation protection function. + * @param otp Over temperature protection handle. + * @param ts Ctrl period. + * @retval None. + */ +void OTP_Init(OTP_Handle *otp, float ts) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + otp->ts = ts; + otp->protCntLimit = PROT_CNT_LIMIT; + otp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring the temperature protection threshold. */ + otp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_IPM_TEMP_POW_DN1; + otp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_IPM_TEMP_POW_DN2; + otp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_IPM_TEMP_POW_DN3; + otp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_IPM_TEMP_POW_OFF; + /* Configuring the protection limiting time. */ + otp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_TEMP_LIMIT1_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_TEMP_LIMIT2_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_TEMP_LIMIT3_TIME_SEC; + otp->recyDelta = PROT_OVER_IPM_TEMP_RECY_DELTA; + OTP_Clear(otp); +} + +/** + * @brief Over temperatre protection detection. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0]) { + otp->protCnt = 0; + ClearBit(&motorErrStatus->all, protBit); + return; + } + + if (otp->protCnt < otp->protCntLimit) { + otp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_3] && otp->protLevel < PROT_LEVEL_4) { + otp->protLevel = PROT_LEVEL_4; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_2] && otp->protLevel < PROT_LEVEL_3) { + otp->protLevel = PROT_LEVEL_3; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_1] && otp->protLevel < PROT_LEVEL_2) { + otp->protLevel = PROT_LEVEL_2; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_0] && otp->protLevel < PROT_LEVEL_1) { + otp->protLevel = PROT_LEVEL_1; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } +} + +/** + * @brief Over temperature protection execution. + * @param otp Over temperature protection handle. + * @param spdRef Speed reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (otp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + /* Reducte motor speed to level 2 */ + *spdRef *= PROT_POW_DN1_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + case PROT_LEVEL_1: + /* Reducte motor speed to level 0 */ + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_0]) { + /* level 1: derate speed reference. */ + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection recovery. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param temp Temperature (celsius). + * @retval None. + */ +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* If not under error state, just return without any operation. */ + if (otp->protLevel == PROT_LEVEL_0) { + motorErrStatus->all &= (~(1 >> protBit)); + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (otp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the temperature is less than threshold 3, level-3 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_3] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_3; + otp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the temperature is less than threshold 2, level-2 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_2] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_2; + otp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the temperature is less than threshold 1, level-1 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_1] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_1; + otp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the temperature is less than threshold 0, level-0 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + } + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection error status clear. + * @param otp Over temperature protection handle. + * @retval None. + */ +void OTP_Clear(OTP_Handle *otp) +{ + MCS_ASSERT_PARAM(otp != NULL); + /* Clear the history value. */ + otp->protCnt = 0; + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + otp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h new file mode 100644 index 00000000..2b9d99a7 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h @@ -0,0 +1,49 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.h + * @author MCU Algorithm Team + * @brief his file contains over temperature protection api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_TEMP_PROT_H +#define McuMagicTag_MCS_TEMP_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float ts; + float timer; + PROT_Level protLevel; +} OTP_Handle; + +void OTP_Init(OTP_Handle *otp, float ts); +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr); +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Clear(OTP_Handle *otp); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/readme.md b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/readme.md new file mode 100644 index 00000000..98b2a068 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/readme.md @@ -0,0 +1,10 @@ +# pmsm_sensorless_2shunt_foc + +**【功能描述】** ++ 基于ECMCU105H/ECBMCU201MPC单板的单电机双电阻采样Foc应用 + +**【环境要求】** ++ 所有单板电源改制为演示用的12V低压,电机选用Gimbal GBM2804H-100T + +**【IDE配置方法】** ++ chipConfig中的Sample栏目里面选中pmsm sensorless 2shunt foc示例,然后点击生成代码即可 diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c new file mode 100644 index 00000000..9fc8afac --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c @@ -0,0 +1,144 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.c + * @author MCU Algorithm Team + * @brief This file provides carrier interrupt application for motor control. + */ + +#include "mcs_carrier.h" +#include "mcs_math.h" +#include "typedefs.h" +#include "mcs_assert.h" +#include "mcs_user_config.h" +#include "mcs_ctlmode_config.h" + +/** + * @brief Synchronous rotation coordinate system angle. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_SyncCoorAngle(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* Synchronous rotation coordinate system angle. */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + /* Current ramp angle is 0. */ + if (mtrCtrl->startup.stage == STARTUP_STAGE_CURR) { + mtrCtrl->axisAngle = 0; + } else if (mtrCtrl->startup.stage == STARTUP_STAGE_SPD) { /* IF control phase angle self-addition. */ + mtrCtrl->axisAngle = IF_CurrAngleCalc(&mtrCtrl->ifCtrl, mtrCtrl->spdRefHz); + } else if (mtrCtrl->startup.stage == STARTUP_STAGE_SWITCH) { /* Switch Angle */ + mtrCtrl->axisAngle = mtrCtrl->smo.elecAngle; + } + break; + + case FSM_RUN: + mtrCtrl->axisAngle = mtrCtrl->smo.elecAngle; + break; + + default: + mtrCtrl->axisAngle = 0; + break; + } +} + +/** + * @brief PWM waveform setting and sampling point setting for a single resistors and dual resistors. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_PwmAdcSet(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SampleMode sampleMode = mtrCtrl->sampleMode; + /* Set the duty cycle according to the sampling mode. */ + if (sampleMode == DUAL_RESISTORS) { + SVPWM_Exec(&mtrCtrl->sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvw); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvw, &mtrCtrl->dutyUvw); + } else if (sampleMode == SINGLE_RESISTOR) { + R1SVPWM_Exec(&mtrCtrl->r1Sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + /* The ADC sampling point position needs to be set based on the phase shift of a single resistors. */ + mtrCtrl->setADCTriggerTimeCb(mtrCtrl->r1Sv.samplePoint[0] * mtrCtrl->aptMaxcntCmp, \ + mtrCtrl->r1Sv.samplePoint[1] * mtrCtrl->aptMaxcntCmp); + } +} + +/** + * @brief Carrier interrupt function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UvwAxis *currUvw = &mtrCtrl->currUvw; + AlbeAxis *currAlbe = &mtrCtrl->iabFbk; + AlbeAxis *vab = &mtrCtrl->vabRef; + SampleMode sampleMode = mtrCtrl->sampleMode; + /* sample mode verify */ + if (sampleMode > SINGLE_RESISTOR || mtrCtrl->setADCTriggerTimeCb == NULL) { + return; + } + /* param verify */ + if (mtrCtrl->setPwmDutyCb == NULL || mtrCtrl->readCurrUvwCb == NULL) { + return; + } + /* Read the three-phase current value. */ + mtrCtrl->readCurrUvwCb(currUvw); + /* Clark Calc */ + ClarkeCalc(currUvw, currAlbe); + /* Smo observation */ + if (mtrCtrl->obserType == FOC_OBSERVERTYPE_SMO1TH) { + /* Smo observation */ + FOSMO_Exec(&mtrCtrl->smo, currAlbe, vab, mtrCtrl->spdRefHz); + } else if (mtrCtrl->obserType == FOC_OBSERVERTYPE_SMO4TH) { + /* Smo4th observation */ + SMO4TH_Exec(&mtrCtrl->smo4th, currAlbe, vab); + mtrCtrl->smo.spdEst = mtrCtrl->smo4th.spdEst; + mtrCtrl->smo.elecAngle = mtrCtrl->smo4th.elecAngle; + } + /* Synchronization angle */ + MCS_SyncCoorAngle(mtrCtrl); + + /* Park transformation */ + ParkCalc(currAlbe, mtrCtrl->axisAngle, &mtrCtrl->idqFbk); + + /* statemachine */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + case FSM_RUN: + CURRCTRL_Exec(&mtrCtrl->currCtrl, &mtrCtrl->vdqRef, mtrCtrl->smo.spdEst, 0); + InvParkCalc(&mtrCtrl->vdqRef, mtrCtrl->axisAngle, vab); + MCS_PwmAdcSet(mtrCtrl); + break; + + case FSM_CAP_CHARGE: + case FSM_CLEAR: + case FSM_IDLE: + mtrCtrl->smo4th.spdEst = 0.0f; + break; + + default: + vab->alpha = 0.0f; + vab->beta = 0.0f; + MCS_PwmAdcSet(mtrCtrl); + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c new file mode 100644 index 00000000..79bc3949 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c @@ -0,0 +1,950 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.c + * @author MCU Algorithm Team + * @brief This file provides motor application. + * @details Single FOC application based on the ECMCU105H/ECBMCU201MPC board + * 1) Motor model is Gimbal GBM2804H-100T. + * 2) Select the pmsm sensorless 2shunt foc example in the sample column + of chipConfig and click Generate Code. + * 3) It's power supply must be changed to 12V. + */ +#include "main.h" +#include "mcs_user_config.h" +#include "mcs_math.h" +#include "hmi_module.h" +#include "mcs_ctlmode_config.h" +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_math_const.h" +#include "mcs_motor_process.h" +#include "mcs_chip_config.h" +#include + +/*------------------------------- Macro Definition -----------------------------------------------*/ +#define US_PER_MS 1000 +#define ANGLE_RANGE_ABS 65536 +#define ANGLE_360_F 65536.0f /* 0 - 65536 indicates 0 to 360. */ +#define APT_FULL_DUTY 1.0f +#define TEMP_3 3.0f +#define TEMP_15 15.0f +#define TEMP_30 30.0f +#define TEMP_45 45.0f +#define TEMP_60 60.0f +#define TEMP_RES_15 78.327f +#define TEMP_RES_30 36.776f +#define TEMP_RES_45 18.301f +#define TEMP_RES_60 9.607f +#define CNT_10 10 +#define CNT_5000 5000 +#define LEVEL_4 4 +#define MOTOR_START_DELAY 2 +#define ADC_READINIT_DELAY 1 +#define ADC_READINIT_TIMES 20 +#define ADC_TRIMVALUE_MIN 1800.0f +#define ADC_TRIMVALUE_MAX 2200.0f +/*------------------------------- Param Definition -----------------------------------------------*/ +/* Motor parameters. */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift */ +static MOTOR_Param g_motorParam = MOTORPARAM_DEFAULTS; +static APT_RegStruct* g_apt[PHASE_MAX_NUM] = {APT_U, APT_V, APT_W}; +/* Motor control handle */ +static MTRCTRL_Handle g_mc = {0}; + +/* Motor speed loop PI param. */ +static void SPDCTRL_InitWrapper(SPDCTRL_Handle *spdHandle, float ts) +{ + /* Speed loop param assignment. */ + PI_Param spdPi = { + .kp = SPD_KP, + .ki = SPD_KI, + .lowerLim = SPD_LOWERLIM, + .upperLim = SPD_UPPERLIM, + }; + /* Speed loop param init. */ + SPDCTRL_Init(spdHandle, &g_motorParam, spdPi, ts); +} + +/* Motor current Loop PI param. */ +static void CURRCTRL_InitWrapper(CURRCTRL_Handle *currHandle, DqAxis *idqRef, DqAxis *idqFbk, float ts) +{ + /* Axis-D current loop param assignment. */ + PI_Param dCurrPi = { + .kp = CURRDAXIS_KP, + .ki = CURRDAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Axis-Q current loop param assignment. */ + PI_Param qCurrPi = { + .kp = CURRQAXIS_KP, + .ki = CURRQAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Current loop param init. */ + CURRCTRL_Init(currHandle, &g_motorParam, idqRef, idqFbk, dCurrPi, qCurrPi, ts); +} + +/* First order smo param. */ +static void FOSMO_InitWrapper(FOSMO_Handle *fosmo, float ts) +{ + /* Smo param assignment. */ + FOSMO_Param fosmoParam = { + .gain = FOSMO_GAIN, + .lambda = FOSMO_LAMBDA, + .fcEmf = FOSMO_EMF_CUTOFF_FREQ, + .fcLpf = SPEED_FILTER_CUTOFF_FREQUENCY, + .pllBdw = FOSMO_PLL_BDW, + }; + /* Init smo param. */ + FOSMO_Init(fosmo, fosmoParam, &g_motorParam, ts); +} + +/* Smo4th param. */ +static void SMO4TH_InitWrapper(SMO4TH_Handle *smo4TH) +{ + /* Smo4th param assignment. */ + SMO4TH_Param smo4thParam = { + .kd = SMO4TH_KD, + .kq = SMO4TH_KQ, + .pllBdw = SMO4TH_PLL_BDW, + .fcLpf = SMO4TH_SPD_FILTER_CUTOFF_FREQ, + }; + /* Init smo param. */ + SMO4TH_Init(smo4TH, smo4thParam, &g_motorParam, CTRL_CURR_PERIOD); +} + +/*------------------------------- Function Definition -----------------------------------------------*/ +/** + * @brief Initialzer of system tick. + * @param mtrCtrl Motor control struct handle. + * @retval None. + */ +static void TimerTickInit(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysTickCnt = 0; + mtrCtrl->msTickNum = US_PER_MS / SYSTICK_PERIOD_US; + mtrCtrl->capChargeTickNum = (INV_CAP_CHARGE_MS * US_PER_MS / SYSTICK_PERIOD_US); +} + +/** + * @brief Init motor control task. + * @retval None. + */ +static void TSK_Init(void) +{ + g_mc.motorStateFlag = 0; + g_mc.uartHeartDetCnt = 0; + g_mc.uartTimeStamp = 0; + g_mc.stateMachine = FSM_IDLE; + g_mc.currCtrlPeriod = CTRL_CURR_PERIOD; /* Init current controller */ + g_mc.aptMaxcntCmp = g_apt0.waveform.timerPeriod; + g_mc.sampleMode = DUAL_RESISTORS; + g_mc.obserType = FOC_OBSERVERTYPE_SMO4TH; /* Init foc observe mode */ + g_mc.controlMode = FOC_CONTROLMODE_SPEED; /* Init motor control mode */ + g_mc.adcCurrCofe = ADC_CURR_COFFI; + g_mc.spdAdjustMode = CUST_SPEED_ADJUST; + g_mc.uartConnectFlag = DISCONNECT; + g_mc.spdCmdHz = USER_MIN_SPD_HZ; /* Motor initialization speed */ + + g_mc.adc0Compensate = ADC0COMPENSATE; /* Phase-u current init adc shift trim value */ + g_mc.adc1Compensate = ADC1COMPENSATE; /* Phase-w current init adc shift trim value */ + + IF_Init(&g_mc.ifCtrl, CTRL_IF_CURR_AMP_A, USER_CURR_SLOPE, CTRL_SYSTICK_PERIOD, CTRL_CURR_PERIOD); + RMG_Init(&g_mc.spdRmg, CTRL_SYSTICK_PERIOD, USER_SPD_SLOPE); /* Init speed slope */ + MtrParamInit(&g_mc.mtrParam, g_motorParam); + + TimerTickInit(&g_mc); + if (g_mc.sampleMode == DUAL_RESISTORS) { + SVPWM_Init(&g_mc.sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3); /* Dual resistors SVPWM init. */ + } else if (g_mc.sampleMode == SINGLE_RESISTOR) { + /* Single resistor SVPWM init. */ + R1SVPWM_Init(&g_mc.r1Sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3, SAMPLE_POINT_SHIFT, SAMPLE_WINDOW_DUTY); + } + + SPDCTRL_InitWrapper(&g_mc.spdCtrl, CTRL_SYSTICK_PERIOD); + CURRCTRL_InitWrapper(&g_mc.currCtrl, &g_mc.idqRef, &g_mc.idqFbk, CTRL_CURR_PERIOD); + FOSMO_InitWrapper(&g_mc.smo, CTRL_CURR_PERIOD); + SMO4TH_InitWrapper(&g_mc.smo4th); + + STARTUP_Init(&g_mc.startup, USER_SWITCH_SPDBEGIN_HZ, USER_SWITCH_SPDBEGIN_HZ + TEMP_3); + + MotorProt_Init(&g_mc.prot); /* Init protect state comond */ + OCP_Init(&g_mc.prot.ocp, CTRL_CURR_PERIOD); + OVP_Init(&g_mc.prot.ovp, CTRL_SYSTICK_PERIOD); + LVP_Init(&g_mc.prot.lvp, CTRL_SYSTICK_PERIOD); + OTP_Init(&g_mc.prot.otp, CTRL_SYSTICK_PERIOD); + STP_Init(&g_mc.prot.stall, CTRL_SYSTICK_PERIOD, PROT_STALLING_CURR_AMP_LIMIT, + PROT_STALLING_SPD_LIMIT, PROT_STALLING_TIME_LIMIT); +} + +/** + * @brief Clear historical values of all controller before start-up. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ClearBeforeStartup(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* The initial angle is 0. */ + mtrCtrl->axisAngle = 0; + + mtrCtrl->spdRefHz = 0.0f; + /* The initial dq-axis reference current is 0. */ + mtrCtrl->idqRef.d = 0.0f; + mtrCtrl->idqRef.q = 0.0f; + + mtrCtrl->vdqRef.d = 0.0f; + mtrCtrl->vdqRef.q = 0.0f; + /* Clear Duty Cycle Value. The initial duty cycle is 0.5. */ + mtrCtrl->dutyUvwLeft.u = 0.5f; + mtrCtrl->dutyUvwLeft.v = 0.5f; + mtrCtrl->dutyUvwLeft.w = 0.5f; + mtrCtrl->dutyUvwRight.u = 0.5f; + mtrCtrl->dutyUvwRight.v = 0.5f; + mtrCtrl->dutyUvwRight.w = 0.5f; + + mtrCtrl->prot.motorErrStatus.all = 0x00; + + RMG_Clear(&mtrCtrl->spdRmg); /* Clear the history value of speed slope control */ + CURRCTRL_Clear(&mtrCtrl->currCtrl); + IF_Clear(&mtrCtrl->ifCtrl); + SPDCTRL_Clear(&mtrCtrl->spdCtrl); + FOSMO_Clear(&mtrCtrl->smo); + SMO4TH_Clear(&mtrCtrl->smo4th); + STARTUP_Clear(&mtrCtrl->startup); + R1SVPWM_Clear(&mtrCtrl->r1Sv); + + OTP_Clear(&mtrCtrl->prot.otp); + OCP_Clear(&mtrCtrl->prot.ocp); + OVP_Clear(&mtrCtrl->prot.ovp); + LVP_Clear(&mtrCtrl->prot.lvp); +} + +/** + * @brief To set the comparison value of the IGBT single-resistance ADC sampling trigger position. + * @param aptx The APT register struct handle. + * @param cntCmpA A Count compare reference of time-base counter. + * @param cntCmpB B Count compare reference of time-base counter. + * @param maxCntCmp Maximum Comparison Value + * @retval None. + */ +static void MCS_SetAdcCompareR1(APT_RegStruct *aptx, unsigned short cntCmpA, + unsigned short cntCmpB, unsigned short maxCntCmp) +{ + unsigned short tmp; + /* Sets the A Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpA), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_A, tmp); + /* Sets the B Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpB), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_B, tmp); +} + +/** + * @brief Open the three-phase lower pipe. + * @param aptAddr Three-phase APT address pointer. + * @param maxDutyCnt Max duty count. + * @retval None. + */ +static void AptTurnOnLowSidePwm(APT_RegStruct **aptAddr, unsigned short maxDutyCnt) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(maxDutyCnt != 0); + unsigned short dutyCnt; + dutyCnt = (unsigned short)(maxDutyCnt * APT_FULL_DUTY); + /* Open the three-phase lower pipe */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_C, dutyCnt); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_D, dutyCnt); + } +} + +/** + * @brief Enable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputEnable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Enable three-phase pwm output */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_UNSET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_UNSET; + } +} + +/** + * @brief Disable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputDisable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Disable three-phase pwm output. */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_SET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_SET; + DCL_APT_ForcePWMOutputLow(aptx); + } +} + +/** + * @brief Smo IF angle difference calculation. + * @param smoElecAngle Smo electrical angle. + * @param ifCtrlAngle IF control angle. + * @retval signed short angle difference. + */ +static float SmoIfAngleDiffCalc(float smoElecAngle, float ifCtrlAngle) +{ + float diff = AngleSub(smoElecAngle, ifCtrlAngle); + /* Smo IF angle difference calculation */ + return diff; +} + +/** + * @brief Construct a new mcs startupswitch object. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_StartupSwitch(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + STARTUP_Handle *startup = &mtrCtrl->startup; + DqAxis *idqRef = &mtrCtrl->idqRef; + float iftargetAmp = mtrCtrl->ifCtrl.targetAmp; + float spdRefHz = mtrCtrl->spdRefHz; + + switch (startup->stage) { + case STARTUP_STAGE_CURR: + if (mtrCtrl->ifCtrl.curAmp >= iftargetAmp) { + /* Stage change */ + idqRef->q = iftargetAmp; + startup->stage = STARTUP_STAGE_SPD; + } else { + /* current amplitude increase */ + idqRef->q = IF_CurrAmpCalc(&mtrCtrl->ifCtrl); + spdRefHz = 0.0f; + } + break; + case STARTUP_STAGE_SPD: + /* current frequency increase */ + if (Abs(spdRefHz) >= startup->spdBegin) { + /* Stage change */ + startup->stage = STARTUP_STAGE_SWITCH; + TrigVal localTrigVal; + TrigCalc(&localTrigVal, SmoIfAngleDiffCalc(mtrCtrl->smo.elecAngle, mtrCtrl->ifCtrl.angle)); + idqRef->d = 0.0f; + mtrCtrl->spdCtrl.spdPi.integral = iftargetAmp * localTrigVal.cos; + } else { + /* Speed rmg */ + spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + } + break; + + case STARTUP_STAGE_SWITCH: + /* Switch from IF to SMO */ + spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + idqRef->q = SPDCTRL_Exec(&mtrCtrl->spdCtrl, mtrCtrl->spdRefHz, mtrCtrl->smo.spdEst); + /* Transitional stage, if current reference speed > critical speed, change to next stage */ + if (spdRefHz >= startup->spdBegin + TEMP_3) { + /* Stage change */ + mtrCtrl->stateMachine = FSM_RUN; + } + break; + + default: + break; + } + mtrCtrl->spdRefHz = spdRefHz; +} + +/** + * @brief Pre-processing of motor status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void MotorStatePerProc(SysStatusReg *statusReg, volatile FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* Get system status */ + if (SysIsError(statusReg)) { + *stateMachine = FSM_FAULT; + } + if (SysGetCmdStop(statusReg)) { + SysCmdStopClr(statusReg); + *stateMachine = FSM_STOP; + } +} + +/** + * @brief Check over current status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckOverCurrentState(SysStatusReg *statusReg, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check systerm error status */ + if (SysIsError(statusReg) == false) { + *stateMachine = FSM_IDLE; + } +} + +/** + * @brief Check bootstrap capacitor charge time. + * @param mtrCtrl The motor control handle. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckBootstrpCapChargeTime(MTRCTRL_Handle *mtrCtrl, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + mtrCtrl->sysTickCnt++; + /* check bootstrap capacitor charge time */ + if (mtrCtrl->sysTickCnt == mtrCtrl->capChargeTickNum) { + *stateMachine = FSM_CLEAR; + } +} + +/** + * @brief Check systerm cmd start signal. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckSysCmdStart(MTRCTRL_Handle *mtrCtrl, + APT_RegStruct **aptAddr, + SysStatusReg *statusReg, + FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check start cmd */ + if (SysGetCmdStart(statusReg)) { + SysRunningSet(statusReg); + SysCmdStartClr(statusReg); + mtrCtrl->sysTickCnt = 0; + *stateMachine = FSM_CAP_CHARGE; + /* Preparation for charging the bootstrap capacitor. */ + AptTurnOnLowSidePwm(aptAddr, mtrCtrl->aptMaxcntCmp); + /* Out put pwm */ + MotorPwmOutputEnable(aptAddr); + } +} + +/** + * @brief System timer tick task. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void TSK_SystickIsr(MTRCTRL_Handle *mtrCtrl, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + SysStatusReg *statusReg = &mtrCtrl->statusReg; + FsmState *stateMachine = &mtrCtrl->stateMachine; + mtrCtrl->msTickCnt++; + /* Pre-processing of motor status. */ + MotorStatePerProc(statusReg, stateMachine); + /* statemachine */ + switch (*stateMachine) { + case FSM_IDLE: + /* Set smo estimate speed before motor start-up */ + g_mc.smo.spdEst = 0.0f; + CheckSysCmdStart(mtrCtrl, aptAddr, statusReg, stateMachine); + break; + case FSM_CAP_CHARGE: + /* Bootstrap Capacitor Charging Timing */ + CheckBootstrpCapChargeTime(mtrCtrl, stateMachine); + break; + /* Clear parameter before start */ + case FSM_CLEAR: + ClearBeforeStartup(mtrCtrl); + *stateMachine = FSM_STARTUP; + break; + case FSM_STARTUP: + MCS_StartupSwitch(mtrCtrl); + break; + case FSM_RUN: + /* Speed ramp control */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + /* Speed loop control */ + mtrCtrl->idqRef.q = SPDCTRL_Exec(&mtrCtrl->spdCtrl, mtrCtrl->spdRefHz, mtrCtrl->smo.spdEst); + break; + case FSM_STOP: + mtrCtrl->spdRefHz = 0.0f; + MotorPwmOutputDisable(aptAddr); + SysRunningClr(statusReg); + *stateMachine = FSM_IDLE; + break; + case FSM_FAULT: /* Overcurrent state */ + CheckOverCurrentState(statusReg, stateMachine); + break; + default: + break; + } +} + +/** + * @brief Read the ADC initialize bias trim value. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void TrimInitAdcShiftValue(MTRCTRL_Handle *mtrCtrl) +{ + float adc0SampleTemp = 0.0f; /* Current bias value for temp store */ + float adc1SampleTemp = 0.0f; + float adc0TempSum = 0.0f; + float adc1TempSum = 0.0f; /* Current bias sum value for 20 times */ + float adcSampleTimes = 0.0f; /* ADC sample times */ + for (int i = 0; i < ADC_READINIT_TIMES; i++) { + adc0SampleTemp = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + adc1SampleTemp = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + BASE_FUNC_DELAY_US(200); /* 200 is delay count, delay 200us triger adc sampling */ + if (adc0SampleTemp > 1000.0f && adc1SampleTemp > 1000.0f) { + adcSampleTimes++; + adc0TempSum += adc0SampleTemp; + adc1TempSum += adc1SampleTemp; + } + } + if (adcSampleTimes < 1.0f) { + adcSampleTimes = 1.0f; /* Prevent divide-by-zero errors */ + } + adc0SampleTemp = adc0TempSum / adcSampleTimes; + adc1SampleTemp = adc1TempSum / adcSampleTimes; + /* Force convert to float */ + mtrCtrl->adc0Compensate = (float) adc0SampleTemp; + mtrCtrl->adc1Compensate = (float) adc1SampleTemp; + /* The normal value scope: 1800 < adc0Compensate < 2200 */ + if(g_mc.adc0Compensate < ADC_TRIMVALUE_MIN || g_mc.adc0Compensate > ADC_TRIMVALUE_MAX \ + || g_mc.adc1Compensate < ADC_TRIMVALUE_MIN || g_mc.adc1Compensate > ADC_TRIMVALUE_MAX) { + DBG_PRINTF("ADC trim value error,please reset!"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + } + adcSampleTimes = 0; + adc0TempSum = 0; + adc1TempSum = 0; +} + +/** + * @brief Read the ADC current sampling value. + * @param CurrUvw Three-phase current. + * @retval None. + */ +static void ReadCurrUvw(UvwAxis *CurrUvw) +{ + MCS_ASSERT_PARAM(CurrUvw != NULL); + float adc0 = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + float adc1 = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + /* Convert adc sample value to current value */ + CurrUvw->u = -(adc0 - g_mc.adc0Compensate) * g_mc.adcCurrCofe; + CurrUvw->w = -(adc1 - g_mc.adc1Compensate) * g_mc.adcCurrCofe; + CurrUvw->v = -CurrUvw->u - CurrUvw->w; +} + +/** + * @brief Setting the APT Output Duty Cycle. + * @param aptx APT register base address. + * @param leftDuty Left duty cycle. + * @param rightDuty Right duty cycle. + * @retval None. + */ +static void SetPwmDuty(APT_Handle *aptx, float leftDuty, float rightDuty) +{ + MCS_ASSERT_PARAM(aptx != NULL); + MCS_ASSERT_PARAM(leftDuty > 0); + MCS_ASSERT_PARAM(rightDuty > 0); + unsigned short maxPeriodCnt = aptx->waveform.timerPeriod; + unsigned short cntCmpLeftEdge = (unsigned short)(leftDuty * maxPeriodCnt); + unsigned short cntCmpRightEdge = (unsigned short)(rightDuty * maxPeriodCnt); + /* avoid overflowing */ + cntCmpLeftEdge = (cntCmpLeftEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpLeftEdge; + cntCmpRightEdge = (cntCmpRightEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpRightEdge; + HAL_APT_SetPWMDuty(aptx, cntCmpLeftEdge, cntCmpRightEdge); +} + +/** + * @brief Duty Cycle Setting. + * @param dutyUvwLeft Three-phase left duty cycle. + * @param dutyUvwRight Three-phase right duty cycle. + * @retval None. + */ +static void SetPwmDutyCp(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight) +{ + MCS_ASSERT_PARAM(dutyUvwLeft != NULL); + MCS_ASSERT_PARAM(dutyUvwRight != NULL); + /* Setting the Three-Phase Duty Cycle */ + SetPwmDuty(&g_apt0, dutyUvwLeft->u, dutyUvwRight->u); + SetPwmDuty(&g_apt1, dutyUvwLeft->v, dutyUvwRight->v); + SetPwmDuty(&g_apt2, dutyUvwLeft->w, dutyUvwRight->w); +} + +/** + * @brief To set the ADC sampling trigger comparison value. + * @param cntCmpSOCA Soca Compare Count Value. + * @param cntCmpSOCB Socb Compare Count Value. + * @retval None. + */ +static void SetADCTriggerTime(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB) +{ + MCS_SetAdcCompareR1(g_apt[PHASE_U], cntCmpSOCA, cntCmpSOCB, g_mc.aptMaxcntCmp); +} + +/** + * @brief Temprature table, the temprature detect range is 15 ~ 60 degree. + * @param tempResisValue Temperature sensor resistance. + * @retval None. + */ +static float TempTable(float tempResisValue) +{ + float boardTemp = 0.0f; + /* Temperatures between 15 and 30. */ + if (tempResisValue > TEMP_RES_30 && tempResisValue <= TEMP_RES_15) { + boardTemp = TEMP_15 + (TEMP_30 - TEMP_15) * (TEMP_RES_15 - tempResisValue) / (TEMP_RES_15 - TEMP_RES_30); + } else if (tempResisValue > TEMP_RES_45 && tempResisValue <= TEMP_RES_30) { /* Temperature between 30 and 45. */ + boardTemp = TEMP_30 + (TEMP_45 - TEMP_30) * (TEMP_RES_30 - tempResisValue) / (TEMP_RES_30 - TEMP_RES_45); + } else if (tempResisValue > TEMP_RES_60 && tempResisValue <= TEMP_RES_45) { /* Temperature between 45 and 50. */ + boardTemp = TEMP_45 + (TEMP_60 - TEMP_45) * (TEMP_RES_45 - tempResisValue) / (TEMP_RES_45 - TEMP_RES_60); + } else if (tempResisValue <= TEMP_RES_60) { + boardTemp = TEMP_60; /* If temperature is over 60, set temperature as 60. */ + } else if (tempResisValue >= TEMP_RES_15) { + boardTemp = TEMP_15; /* If temperature is lower 15, set temperature as 15. */ + } + return boardTemp; +} + +/** + * @brief Read power board temperature and udc. + * @retval None. + */ +static void ReadBoardTempAndUdc(void) +{ + HAL_ADC_SoftTrigSample(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + HAL_ADC_SoftTrigSample(&ADCUDC_HANDLE, ADCUDCSOCNUM); + BASE_FUNC_DELAY_US(CNT_10); /* Delay 10 us. */ + /* Force convert to float type. */ + float resisAdcValue = (float)HAL_ADC_GetConvResult(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + /* 10 / (x + 10) * 3.3 = resisAdcValue / 4096 * 3.3, x is resisValue, 10kohm is resistor divider value. */ + float resisValue = (4096.0f * 10.0f - 10.0f * resisAdcValue) / resisAdcValue; + g_mc.powerBoardTemp = TempTable(resisValue); + g_mc.udc = ((float)HAL_ADC_GetConvResult(&ADCUDC_HANDLE, ADCUDCSOCNUM)) * ADC_UDC_COFFI; +} + +/** + * @brief Execut abnormal feedback speed protect motion. + * @retval None. + */ +static void SpdFbkErrorProt_Exec(void) +{ + if (g_mc.prot.motorErrStatus.Bit.motorStalling == 0 && + g_mc.prot.motorErrStatus.Bit.overVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.lowerVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.overIpmTempErr == 0 && + g_mc.prot.motorErrStatus.Bit.overCurrErr == 0) { + g_mc.prot.motorErrStatus.Bit.revRotErr = 1; + /* If revRotErr, execute protect motion. */ + ProtSpo_Exec(g_apt); + } +} + +/** + * @brief Execut nan data protect motion. + * @retval None. + */ +static void NanDataDetect(void) +{ + static short errorSpdStatus = 0; + /* Detect the nan observer speed or current value. */ + if (isnan(g_mc.smo.spdEst) || isnan(g_mc.idqRef.q)) { + errorSpdStatus++; + } else { + errorSpdStatus = 0; + } + /* If the data is nan & continuous counting value is over 500 times, execute protect motion. + the detect time is 500 * 500us = 250ms. */ + if (errorSpdStatus >= 500) { + errorSpdStatus = 0; + SpdFbkErrorProt_Exec(); + } +} + +/** + * @brief Check abnormal feedback speed. + * @retval None. + */ +static void CheckSpdFbkStatus(void) +{ + static short errorCurrStatus = 0; + static short errorDeltaSpdStatus = 0; + NanDataDetect(); + if (g_mc.stateMachine == FSM_RUN) { + /* Detect the abnormal idq feedback current. */ + if (Abs(g_mc.idqRef.q - g_mc.idqFbk.q) >= CTRL_IF_CURR_AMP_A) { + errorCurrStatus++; + } else { + errorCurrStatus = 0; + } + /* Detect the abnormal feedback speed, the normal speed is > 0, if smo.spdEst < -10 && + delta speed error > USER_MIN_SPD_HZ + 10.0f at FSM_RUN stage, set the motor motion as error */ + if (g_mc.smo.spdEst < -10.0f && (g_mc.spdRefHz - g_mc.smo.spdEst > USER_MIN_SPD_HZ + 10.0f)) { + errorDeltaSpdStatus++; + } + } + /* Execute protect motion if count over 500 times, this error status caused by abnormal speed + or cabnormal urrent feedback, the detect time is 500 * 500us = 250ms. */ + if (errorCurrStatus >= 500) { + errorCurrStatus = 0; + SpdFbkErrorProt_Exec(); + } + /* This error statu caused by motor stalling, the detect time is 2 * 500us = 1ms. */ + if (errorDeltaSpdStatus >= 2) { + errorDeltaSpdStatus = 0; + g_mc.prot.motorErrStatus.Bit.motorStalling = 1; + } +} + +/** + * @brief Check Potentiometer Value callback function. + * @param param The TIMER_Handle. + * @retval None. + */ +void CheckPotentiometerValueCallback(void *param) +{ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + static float potentiomitorAdcValue = 0.0f; + static float spdCmdHz = 0; + static float spdCmdHzLast = USER_MIN_SPD_HZ; /* 35.0 is spdCmdHzLast init value */ + HAL_ADC_SoftTrigSample(&ADCPTT_HANDLE, ADCPTTSOCNUM); + BASE_FUNC_DELAY_US(10); /* Delay 10 us. */ + potentiomitorAdcValue = (float)HAL_ADC_GetConvResult(&ADCPTT_HANDLE, ADCPTTSOCNUM); + /* 4045.0 is adc sample max value of potentiomitor, convert max spd to 180.25Hz */ + spdCmdHz = potentiomitorAdcValue / 4045.0f * USER_MAX_SPD_HZ; + if (Abs(spdCmdHzLast - spdCmdHz) < 1.0f) { /* Ignore changes less than 1. */ + return; + } + spdCmdHzLast = spdCmdHz; + if (spdCmdHz < USER_MIN_SPD_HZ) { /* 35.0 is spdCmdHz lower limit */ + spdCmdHz = USER_MIN_SPD_HZ; /* 35.0 is spdCmdHz lower limit */ + } + if (spdCmdHz > g_mc.mtrParam.maxElecSpd) { /* spdCmdHz upper limit */ + spdCmdHz = g_mc.mtrParam.maxElecSpd; /* spdCmdHz upper limit */ + } + if (g_mc.spdAdjustMode == CUST_SPEED_ADJUST) { + g_mc.spdCmdHz = spdCmdHz; + } +} + +/** + * @brief System timer ISR for Motor Statemachine CallBack function. + * @param param The systick timer handle. + * @retval None. + */ +void MotorStatemachineCallBack(void *param) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + /* Read power board temprature and voltage. */ + ReadBoardTempAndUdc(); + /* Motor speed loop state machine. */ + TSK_SystickIsr(&g_mc, g_apt); + + /* Motor error speed feedback check. */ + CheckSpdFbkStatus(); + /* Motor stalling detect. */ + STP_Det_ByCurrSpd(&g_mc.prot.stall, &g_mc.prot.motorErrStatus, g_mc.smo.spdEst, g_mc.idqFbk); + STP_Exec(&g_mc.prot.motorErrStatus, g_apt); + + /* Motor over voltage detect. */ + OVP_Det(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + OVP_Exec(&g_mc.prot.ovp, &g_mc.spdRefHz, g_apt); + OVP_Recy(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* Motor lower voltage detect. */ + LVP_Det(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + LVP_Exec(&g_mc.prot.lvp, &g_mc.spdRefHz, g_apt); + LVP_Recy(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* Power board over temperature detect. */ + OTP_Det(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + OTP_Exec(&g_mc.prot.otp, &g_mc.spdRefHz, g_apt); + OTP_Recy(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + + /* If protect level == 4, set motor state as stop. */ + if (g_mc.prot.ovp.protLevel == LEVEL_4 || g_mc.prot.lvp.protLevel == LEVEL_4 \ + || g_mc.prot.otp.protLevel == LEVEL_4) { + SysCmdStopSet(&g_mc.statusReg); + } +} + +/** + * @brief The carrier ISR wrapper function. + * @param aptHandle The APT handle. + * @retval None. + */ +void MotorCarrierProcessCallback(void *aptHandle) +{ + MCS_ASSERT_PARAM(aptHandle != NULL); + BASE_FUNC_UNUSED(aptHandle); + /* the carrierprocess of motor */ + MCS_CarrierProcess(&g_mc); + /* Over current protect */ + if (g_mc.stateMachine == FSM_RUN || g_mc.stateMachine == FSM_STARTUP) { + OCP_Det(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus, g_mc.idqFbk); + OCP_Exec(&g_mc.prot.ocp, &g_mc.idqFbk, g_apt); /* Execute over current protect motion */ + if (g_mc.prot.ocp.protLevel < LEVEL_4) { + OCP_Recy(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus); + } + } +} + +/** + * @brief Event interrupt callback function of APT module. + * @param para APT module handle. + * @retval None. + */ +void MotorSysErrCallback(void *para) +{ + MCS_ASSERT_PARAM(para != NULL); + APT_Handle *handle = (APT_Handle *)para; + /* The IPM overcurrent triggers and disables the three-phase PWM output. */ + MotorPwmOutputDisable(g_apt); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_U], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_V], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_W], APT_OC_COMBINE_EVENT_A1); + /* Status setting error */ + SysErrorSet(&g_mc.statusReg); + DBG_PRINTF("APT error! \r\n"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + BASE_FUNC_UNUSED(handle); +} + +/** + * @brief Init motor controller's data structure. + * @retval None. + */ +static void InitSoftware(void) +{ + /* Initializing motor control param */ + TSK_Init(); + /* Read phase-uvw current */ + g_mc.readCurrUvwCb = ReadCurrUvw; + g_mc.setPwmDutyCb = SetPwmDutyCp; + g_mc.setADCTriggerTimeCb = SetADCTriggerTime; +} + +/** + * @brief Config the KEY func. + * @param handle The GPIO handle. + * @retval None. + */ +static KEY_State Key_StateRead(GPIO_Handle *handle) +{ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + BASE_FUNC_DELAY_MS(30); /* delay 30ms for deshake */ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + while (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + } + return KEY_DOWN; + } + } + return KEY_UP; +} + +/** + * @brief Control motor start and stop state by key func. + * @param param The GPIO handle. + * @retval None. + */ +void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + if (Key_StateRead(handle) == KEY_DOWN) { + if (g_mc.motorStateFlag == 0) { /* start motor */ + g_mc.motorStateFlag = 1; + SysCmdStartSet(&g_mc.statusReg); + } else if (g_mc.motorStateFlag == 1) { /* stop motor */ + g_mc.motorStateFlag = 0; + SysCmdStopSet(&g_mc.statusReg); + } + } +} + +/** + * @brief User application main entry function. + * @retval BSP_OK. + */ +int MotorMainProcess(void) +{ + unsigned int tickNum1Ms = 2; /* 1ms tick */ + static unsigned int tickCnt1Ms = 0; + unsigned int tickNum500Ms = 1000; /* 500ms tick */ + static unsigned int tickCnt500Ms = 0; + SystemInit(); + HMI_Init(); /* Init uart interrupt */ + HAL_TIMER_Start(&g_timer0); + HAL_TIMER_Start(&g_timer1); + + /* Disable PWM output before startup. */ + MotorPwmOutputDisable(g_apt); + /* Software initialization. */ + InitSoftware(); + /* Start the PWM clock. */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + /* System Timer clock. */ + BASE_FUNC_DELAY_MS(ADC_READINIT_DELAY); + TrimInitAdcShiftValue(&g_mc); + BASE_FUNC_DELAY_MS(MOTOR_START_DELAY); + while (1) { + /* Cycling send data to host */ + HMI_Process_Tx(&g_mc); + if (g_mc.msTickCnt - tickCnt1Ms >= tickNum1Ms) { + tickCnt1Ms = g_mc.msTickCnt; + /* User Code 1ms Event */ + HMI_Process_Rx(&g_mc); + /* User Code 1ms Event */ + } + + if (g_mc.msTickCnt - tickCnt500Ms >= tickNum500Ms) { + if (SysIsError(&g_mc.statusReg) != true) { + /* LED toggle in normal status. */ + HAL_GPIO_TogglePin(&LED1_HANDLE, LED1_PIN); + } + tickCnt500Ms = g_mc.msTickCnt; + } + } + return 0; +} diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c new file mode 100644 index 00000000..7c4f7525 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c @@ -0,0 +1,718 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of cust process interface. + */ + +#include "cust_process.h" +#include "mcs_ctlmode_config.h" +#include "mcs_math_const.h" +#include "mcs_user_config.h" +#include "mcs_assert.h" +#include "main.h" +#include "uart_module.h" +#include "mcs_mtr_param.h" +/* Macro definitions --------------------------------------------------------------------------- */ +/* Constant value. */ +#define CONST_VALUE_60 60.0f /* Constant value 60. */ +#define CONST_VALUE_DIV_1000 0.001f /* Constant value 1/1000. */ + +/* Data array index. */ +#define DATA_SEGMENT_ONE 0 /* First element of the data segment */ +#define DATA_SEGMENT_TWO 1 /* Second element of the data segment */ +#define DATA_SEGMENT_THREE 2 /* Third element of the data segment */ +#define DATA_SEGMENT_FOUR 3 /* Fourth element of the data segment */ +#define CUSTACKCODELEN 10 /* Ack code length */ + +/* Command code. */ +#define SET_PID_KP 0x01 /* Set Pid Kp Command Params */ +#define SET_PID_KI 0x02 /* Set Pid Ki Command Params */ +#define SET_PID_LIMIT 0x03 /* Set Pid limit Command Params */ + +#define SET_SMO1TH_PLL_BDW 0x01 /* Set Smo1th Pll BandWidth Command Params */ +#define SET_SMO1TH_SPDFLITER_FC 0x02 /* Set Smo1th Fc Command Params */ +#define SET_SMO1TH_FILCOMPANGLE 0x03 /* Set Smo1th FillComp Command Params */ + +#define SET_SMO4TH_KD 0x01 /* Set Smo4th Kd Command Params */ +#define SET_SMO4TH_KP 0x02 /* Set Smo4th Kq Command Params */ + +#define SET_SPD_COMMAND_HZ 0x01 /* Set Target Speed Command Params */ +#define SET_SPD_RMG_SLOPE 0x02 /* Set Speed Slope Command Params */ + +#define SET_MAX_ELEC_SPD 0x01 /* Set Max Motor Speed Command Params */ +#define SET_MOTOR_NUM_OF_PAIRS 0x02 /* Set Motor Command Params */ + +#define SET_MOTOR_RES_OF_STATOR 0x01 /* Set Motor Res Command Params */ +#define SET_MOTOR_DAXIS_INDUCTANCE 0x02 /* Set Motor Daxis Inductance Command Params */ +#define SET_MOTOR_QAXIS_INDUCTANCE 0x03 /* Set Motor Qaxis Inductance Command Params */ + +#define SET_SVPWM_VOLTAGE_PER_UNIT 0x01 /* Set Svpwm Voltage Params */ +#define SET_ADC_CURRENT_SAMPLE_COFE 0x02 /* Set Adc coffe Params */ +#define SET_CURRENT_LOOP_CONTROL_PERIOD 0x03 /* Set Current loop period Command Params */ + +#define SET_IF_TARGET_CURRENT_VALUE 0x01 /* Set If Target Params */ +#define SET_INCREMENT_OF_IF_CURRENT 0x02 /* Set If Step Command Params */ +#define SET_SPEED_RING_BEGIN_SPEED 0x03 /* Set If to Smo Start Speed Command Params */ + +static unsigned char ackCode = 0; +static unsigned char g_uartTxBuf[CUSTACKCODELEN] = {0}; + +/** + * @brief Set observer type. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverType(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + if (funcCode == FOC_OBSERVERTYPE_SMO1TH) { + ackCode = 0X01; + mtrCtrl->obserType = FOC_OBSERVERTYPE_SMO1TH; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->obserType); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH) { + ackCode = 0X02; + mtrCtrl->obserType = FOC_OBSERVERTYPE_SMO4TH; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->obserType); + } +} + +/** + * @brief Set pid parameter ack code. + * @param funcCode Received data funccode. + */ +static unsigned char SetPidAckCode(int funcCode) +{ + switch (funcCode) { + /* Set current loop D-Axis PID parameter ack code. */ + case FOC_CURDAXISPID_PARAMS: + ackCode = 0xE0; + break; + /* Set current loop Q-Axis PID parameter ack code. */ + case FOC_CURQAXISPID_PARAMS: + ackCode = 0xE3; + break; + /* Set speed loop PID parameter ack code. */ + case FOC_SPDPID_PARAMS: + ackCode = 0xE6; + break; + default: + break; + } + return ackCode; +} + +/** + * @brief Set pid parameters. + * @param pidHandle The pid control handle. + * @param rxData Receive buffer + */ +static void SetPidParams(PID_Handle *pidHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + switch (cmdCode) { + case SET_PID_KP: /* Set the P parameter. */ + PID_SetKp(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_KP), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_KI: /* Set the I parameter. */ + PID_SetKi(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_KI), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_LIMIT: /* Set the pid limit. */ + PID_SetLimit(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_LIMIT), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor pid parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorPidParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_CURDAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.dAxisPi, rxData); /* Set Curr loop Daxis pid params */ + } else if (funcCode == FOC_CURQAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.qAxisPi, rxData); /* Set Curr loop Qaxis pid params */ + mtrCtrl->currCtrl.dAxisPi.upperLimit = mtrCtrl->currCtrl.qAxisPi.upperLimit; + mtrCtrl->currCtrl.dAxisPi.lowerLimit = mtrCtrl->currCtrl.qAxisPi.lowerLimit; + } else if (funcCode == FOC_SPDPID_PARAMS) { + SetPidParams(&mtrCtrl->spdCtrl.spdPi, rxData); /* Set Speed loop params */ + } +} + +/** + * @brief Set first order sliding mode observer parameters. + * @param smoHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo1thParams(FOSMO_Handle *smoHandle, CUSTDATATYPE_DEF *rxData) +{ + smoHandle->kSmo = rxData->data[DATA_SEGMENT_TWO].typeF; + ackCode = 0X09; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->kSmo); +} + +/** + * @brief Set first order sliding mode observer's phase-locked loop parameters. + * @param smoHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo1thPLLParams(FOSMO_Handle *smoHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + float pllBdw = 0.0f; + switch (cmdCode) { + case SET_SMO1TH_PLL_BDW: /* Set the bandwidth. */ + pllBdw = rxData->data[DATA_SEGMENT_THREE].typeF; + smoHandle->pll.pi.kp = 2.0f * pllBdw; /* kp = 2.0f * pllBdw */ + smoHandle->pll.pi.ki = pllBdw * pllBdw; /* ki = pllBdw * pllBdw */ + ackCode = 0X0A; + CUST_AckCode(g_uartTxBuf, ackCode, pllBdw); + break; + case SET_SMO1TH_SPDFLITER_FC: /* Set the cutoff frequency. */ + smoHandle->spdFilter.fc = rxData->data[DATA_SEGMENT_THREE].typeF; + smoHandle->spdFilter.a1 = 1.0f / (1.0f + DOUBLE_PI * smoHandle->spdFilter.fc * CTRL_CURR_PERIOD); + smoHandle->spdFilter.b1 = 1.0f - smoHandle->spdFilter.a1; + ackCode = 0X0B; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->spdFilter.fc); + break; + case SET_SMO1TH_FILCOMPANGLE: /* Set the compensation angle. */ + smoHandle->filCompAngle = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0C; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->filCompAngle); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set fourth order sliding mode observer parameters. + * @param smo4thHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo4thParams(SMO4TH_Handle *smo4thHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SMO4TH_KD: /* Set d axis gain. */ + smo4thHandle->kd = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0D; + CUST_AckCode(g_uartTxBuf, ackCode, smo4thHandle->kd); + break; + case SET_SMO4TH_KP: /* Set q axis gain. */ + smo4thHandle->kq = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0E; + CUST_AckCode(g_uartTxBuf, ackCode, smo4thHandle->kq); + break; + default: + break; + } +} + +/** + * @brief Set fourth order sliding mode observer's phase-locked loop parameters. + * @param smo4thHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo4thPLLParams(SMO4TH_Handle *smo4thHandle, CUSTDATATYPE_DEF *rxData) +{ + float pllBdw = rxData->data[DATA_SEGMENT_TWO].typeF; + smo4thHandle->pll.pi.kp = (2.0f) * pllBdw; /* kp = 2.0f * pllBdw */ + smo4thHandle->pll.pi.ki = pllBdw * pllBdw; + ackCode = 0X11; + CUST_AckCode(g_uartTxBuf, ackCode, pllBdw); +} + +/** + * @brief Set observer parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_OBSERVERTYPE_SMO1TH) { + SetObserverSmo1thParams(&mtrCtrl->smo, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO1TH_PLL) { + SetObserverSmo1thPLLParams(&mtrCtrl->smo, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH) { + SetObserverSmo4thParams(&mtrCtrl->smo4th, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH_PLL) { + SetObserverSmo4thPLLParams(&mtrCtrl->smo4th, rxData); + } +} + +/** + * @brief Set motor speed and speed slope. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorSpdAndSlope(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SPD_COMMAND_HZ: /* Set target speed(hz). */ + mtrCtrl->spdCmdHz = rxData->data[DATA_SEGMENT_THREE].typeF * mtrCtrl->mtrParam.mtrNp / CONST_VALUE_60; + /* Judgement the value > 0.00001, make sure denominator != 0. */ + if (rxData->data[DATA_SEGMENT_FOUR].typeF > 0.00001f) { + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_FOUR].typeF * CTRL_SYSTICK_PERIOD; + } + ackCode = 0X16; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->spdCmdHz); + break; + case SET_SPD_RMG_SLOPE: /* Set speed slope. */ + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_THREE].typeF * CTRL_SYSTICK_PERIOD; + ackCode = 0X17; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor base parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorBaseParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MAX_ELEC_SPD: /* Set max electric speed. */ + mtrParamHandle->maxElecSpd = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrParamHandle->mtrNp; + ackCode = 0X18; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_MOTOR_NUM_OF_PAIRS: /* Set the number of motor pole pairs. */ + mtrParamHandle->mtrNp = (unsigned short)(rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = 0X19; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrParamHandle->mtrNp); + break; + default: + break; + } +} + +/** + * @brief Set motor special parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorSpecialParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MOTOR_RES_OF_STATOR: /* Set the resistor of stator. */ + mtrParamHandle->mtrRs = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1A; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrRs); + break; + case SET_MOTOR_DAXIS_INDUCTANCE: /* Set the d axis inductance. */ + mtrParamHandle->mtrLd = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1B; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLd); + break; + case SET_MOTOR_QAXIS_INDUCTANCE: /* Set the q axis inductance. */ + mtrParamHandle->mtrLq = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1C; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLq); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor board parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetMotorBoardParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SVPWM_VOLTAGE_PER_UNIT: /* Set svpwm voltage per unit. */ + mtrCtrl->sv.voltPu = rxData->data[DATA_SEGMENT_THREE].typeF * ONE_DIV_SQRT3; + mtrCtrl->currCtrl.outLimit = mtrCtrl->sv.voltPu * ONE_DIV_SQRT3; + ackCode = 0X1D; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_ADC_CURRENT_SAMPLE_COFE: /* Set adc current sample cofeature. */ + mtrCtrl->adcCurrCofe = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1E; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->adcCurrCofe); + break; + case SET_CURRENT_LOOP_CONTROL_PERIOD: /* Set current loop control period. */ + mtrCtrl->currCtrlPeriod = 1 / rxData->data[DATA_SEGMENT_THREE].typeF * CONST_VALUE_DIV_1000; + ackCode = 0X1F; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == MOTOR_PARAMS_BASE) { + SetMotorBaseParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_SPECIAL) { + SetMotorSpecialParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_BOARD) { + SetMotorBoardParams(mtrCtrl, rxData); + } +} + +/** + * @brief Motor start. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStart(MTRCTRL_Handle *mtrCtrl) +{ + if (mtrCtrl->stateMachine != FSM_RUN) { + SysCmdStartSet(&mtrCtrl->statusReg); /* start motor. */ + mtrCtrl->motorStateFlag = 1; + ackCode = 0X24; /* send ackcode to host. */ + CUST_AckCode(g_uartTxBuf, ackCode, 1); + } +} + +/** + * @brief Motor stop. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStop(MTRCTRL_Handle *mtrCtrl) +{ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + ackCode = 0X25; + CUST_AckCode(g_uartTxBuf, ackCode, 0); +} + +/** + * @brief Motor state reset. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorReset(MTRCTRL_Handle *mtrCtrl) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_SoftReset(); +} + +/** + * @brief Set IF-Startup parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetStartupIFParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_IF_TARGET_CURRENT_VALUE: /* Set I/F start up target current value. */ + mtrCtrl->ifCtrl.targetAmp = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X26; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.targetAmp); + break; + case SET_INCREMENT_OF_IF_CURRENT: /* Set increment of I/F start up current. */ + mtrCtrl->ifCtrl.stepAmp = mtrCtrl->ifCtrl.targetAmp / rxData->data[DATA_SEGMENT_THREE].typeF * + CTRL_SYSTICK_PERIOD; + ackCode = 0X27; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.stepAmp); + break; + case SET_SPEED_RING_BEGIN_SPEED: /* Set speed ring begin speed. */ + mtrCtrl->startup.spdBegin = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrCtrl->mtrParam.mtrNp; + ackCode = 0X28; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set start up parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetStartupParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_STARTUP_IF) { + SetStartupIFParams(mtrCtrl, rxData); + } +} + +/** + * @brief Set adjust speed mode. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetAdjustSpdMode(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get commond code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + if (funcCode == HOST_SPEED_ADJUST) { + mtrCtrl->spdAdjustMode = HOST_SPEED_ADJUST; + /* Uart connect success. */ + mtrCtrl->uartConnectFlag = CONNECTING; + ackCode = 0X2A; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + } else if (funcCode == CUST_SPEED_ADJUST) { + if (cmdCode == 1) { /* If uart connection disconnected & stop motor commond. */ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + } + mtrCtrl->spdAdjustMode = CUST_SPEED_ADJUST; + ackCode = 0X2B; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + /* Uart disconnect. */ + mtrCtrl->uartConnectFlag = DISCONNECT; + } +} + +/** + * @brief Check uart connect. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_UartHandShake(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); +} + +/** + * @brief Set Motor Initial Status Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorInitParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_OBSERVER_TYPE: { /* Set observer type. */ + CMDCODE_SetObserverType(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_PID_PARAMS: { /* Set motor pid parameters. */ + CMDCODE_SetMotorPidParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_OBSERVER_PARAMS: { /* Set observer parameters. */ + CMDCODE_SetObserverParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_TARGETSPD: { /* Set motor speed and speed slope. */ + CMDCODE_SetMotorSpdAndSlope(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_PARAMS: { /* Set motor parameters. */ + CMDCODE_SetMotorParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_ADJUSTSPD_MODE: /* Set adjust speed mode. */ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); + break; + default: + break; + } +} + +/** + * @brief Set Motor Control System Status. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorState(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + BASE_FUNC_UNUSED(rxData); + switch (code) { + case CMDCODE_MOTOR_START: { /* Motor start command */ + CMDCODE_MotorStart(mtrCtrl); + } + break; + case CMDCODE_MOTOR_STOP: { /* Motor stop command */ + CMDCODE_MotorStop(mtrCtrl); + } + break; + case CMDCODE_MOTORSTATE_RESET: { /* Motor reset command */ + CMDCODE_MotorReset(mtrCtrl); + } + break; + default: + break; + } +} + +/** + * @brief Set Startup and Uart Link Handshake Flag Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetOtherParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_STARTUP_PARAMS: /* Set start up parameters. */ + CMDCODE_SetStartupParams(mtrCtrl, rxData); + break; + case CMDCODE_UART_HANDSHAKE: { /* Check uart hand shake. */ + CMDCODE_UartHandShake(mtrCtrl, rxData); + } + break; + case CMDCODE_UART_HEARTDETECT: { /* Check uart hand shake. */ + mtrCtrl->uartHeartDetCnt++; + } + break; + default: + break; + } +} +/** + * @brief Instruction code executor. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_Process(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + CMDCODE_EXE_SetMotorInitParams(mtrCtrl, rxData, code); + CMDCODE_EXE_SetMotorState(mtrCtrl, rxData, code); + CMDCODE_EXE_SetOtherParams(mtrCtrl, rxData, code); +} + +/** + * @brief Host data download callback and data parsing. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + + /* Uart data storage struct */ + CUSTDATATYPE_DEF data; + volatile unsigned char *ptrCnt = &rxBuf[FRAME_CHECK_BEGIN + 1]; + volatile unsigned char *strCnt = &data.data[0].typeCh[0]; + for (unsigned int j = 0; j < FRAME_RECV_DATA_LENTH * FRAME_ONE_DATA_LENTH; j++) { + *strCnt++ = *ptrCnt++; + } + /* Message function code. */ + data.code = rxBuf[FRAME_CHECK_BEGIN]; + CMDCODE_EXE_Process(mtrCtrl, &data, data.code); +} + +/** + * @brief The host computer displays data transmission. + * @param mtrCtrl The motor control handle. + * @param txData Message content. + * @param stage Message status function code. + */ +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txData != NULL); + if (mtrCtrl->stateMachine == FSM_IDLE) { + mtrCtrl->smo.spdEst = 0.0f; + } + /* Data send to host. */ + txData->data[CURRDQ_Q].typeF = mtrCtrl->idqFbk.q; + txData->data[CURRDQ_D].typeF = mtrCtrl->idqFbk.d; + txData->data[CURRREFDQ_Q].typeF = mtrCtrl->idqRef.q; + txData->data[CURRREFDQ_D].typeF = mtrCtrl->idqRef.d; + /* Motor current speed. */ + txData->data[CURRSPD].typeF = mtrCtrl->smo.spdEst * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Motor commond speed. */ + txData->data[SPDCMDHZ].typeF = mtrCtrl->spdCmdHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Bus voltage. */ + txData->data[UDC].typeF = mtrCtrl->udc; + /* Power board temprature. */ + txData->data[POWERBOARDTEMP].typeF = mtrCtrl->powerBoardTemp; + /* Motor protection status flag. */ + txData->data[CUST_ERR_CODE].typeI = mtrCtrl->prot.motorErrStatus.all; + /* Three phase current. */ + txData->data[CURRUVW_U].typeF = mtrCtrl->currUvw.u; + txData->data[CURRUVW_V].typeF = mtrCtrl->currUvw.v; + txData->data[CURRUVW_W].typeF = mtrCtrl->currUvw.w; + /* Three phase pwm duty. */ + txData->data[PWMDUTYUVW_U].typeF = mtrCtrl->dutyUvw.u; + txData->data[PWMDUTYUVW_V].typeF = mtrCtrl->dutyUvw.v; + txData->data[PWMDUTYUVW_W].typeF = mtrCtrl->dutyUvw.w; + /* Motor electric angle. */ + txData->data[AXISANGLE].typeF = mtrCtrl->axisAngle; + txData->data[VDQ_Q].typeF = mtrCtrl->vdqRef.q; + txData->data[VDQ_D].typeF = mtrCtrl->vdqRef.d; + txData->data[SPDREFHZ].typeF = mtrCtrl->spdRefHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + txData->data[SENDTIMESTAMP].typeF = mtrCtrl->uartTimeStamp; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h new file mode 100644 index 00000000..60fe69bb --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h @@ -0,0 +1,36 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "protocol.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); + +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c new file mode 100644 index 00000000..58bf15a7 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c @@ -0,0 +1,57 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of human-machine interface. + */ + +#include "hmi_module.h" +#include "mcs_assert.h" + +/** + * @brief HMI Initializatio. + * @retval None. + */ +void HMI_Init(void) +{ + UartRecvInit(); +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Rx(mtrCtrl); +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Tx(mtrCtrl); +} diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h new file mode 100644 index 00000000..056f8d73 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h @@ -0,0 +1,37 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "uart_module.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void HMI_Init(void); + +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl); +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c new file mode 100644 index 00000000..56f0c0bb --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c @@ -0,0 +1,174 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ + +#include "protocol.h" +#include "apt.h" +#include "typedefs.h" +#include "main.h" +#include "mcs_assert.h" +#include "cust_process.h" + +/** + * @brief Callback function for receiving data analysis and processing. + * @param rxBuf Receive buffer. + */ +__weak void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(rxBuf); +} +/** + * @brief User-defined protocol message sending function (weak function). + * @param rxData Sending Messages.. + */ +__weak void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(*txData); +} + +static void (*g_ptrDataProcess)(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) = CUST_UartDataProcess; + +/** + * @brief Frame checksum. + * @param ptr Pointer to the data to be checked + * @param num Number of bytes + * @retval unsigned char Checksum + */ +static unsigned char CheckSum(unsigned char *ptr, unsigned char num) +{ + unsigned char sum = 0; + unsigned char *p = ptr; + /* Calculate the sum of received data. */ + for (unsigned char i = 0; i < num; i++) { + sum += (unsigned char)*p; + p++; + } + return sum; +} + +/** + * @brief Transmitting Data Frames. + * @param mtrCtrl The motor control handle. + * @param txBuf Sending Messages. + */ +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txBuf != NULL); + unsigned int dataLen = FRAME_ONE_DATA_LENTH * SEND_FRAME_DATA_NUM; + unsigned char i = 0; + CUSTDATATYPE_DEF txData = {0}; + CUST_SetTxMsg(mtrCtrl, &txData); + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_SENT; + /* Message data */ + for (unsigned char x = 0; x < SEND_FRAME_DATA_NUM; x++) { + unsigned char floatIndex = 0; + unsigned char byteOffset = i; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + } + /* Message verification domain */ + txBuf[dataLen + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[dataLen + i++] = FRAME_END; + return dataLen + i; +} + +/** + * @brief Transmitting Data Frames. + * @param txBuf Sending Cust Ack Code. + * @param ackCode Ack Code. + * @param varParams Host set parameter. + */ +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(txBuf != NULL); + CUSTDATATYPE_DEF txData = {0}; + int dataIndex = 0; + unsigned int i = 0; + unsigned int txLen = 0; + unsigned char dataLen = FRAME_ONE_CHAR_LENTH + FRAME_ONE_DATA_LENTH; + + txData.data[0].typeF = varParams; + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_CUSTACK; + /* Message ack code */ + txBuf[i++] = ackCode; + /* Message data */ + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + + /* Message verification domain */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = FRAME_END; + txLen = FRAME_ONE_CHAR_LENTH + i++; + HAL_UART_WriteDMA(&g_uart0, txBuf, txLen); +} + +/** + * @brief Cust receive data process. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + unsigned char g_uartTxBuf[10] = {0}; + unsigned char ackCode = 0; + /* Frame header check */ + if (rxBuf[0] != FRAME_START) { + ackCode = 0X78; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Frame trailer check */ + if (rxBuf[FRAME_LENTH - 1] != FRAME_END) { + ackCode = 0X79; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Checksum */ + if (CheckSum((unsigned char*)&rxBuf[FRAME_CHECK_BEGIN], FRAME_CHECK_NUM) != rxBuf[FRAME_CHECKSUM]) { + ackCode = 0X7A; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } else { + if (g_ptrDataProcess == NULL) { + return; + } else { + g_ptrDataProcess(mtrCtrl, rxBuf); + } + } +} diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h new file mode 100644 index 00000000..900a00d8 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h @@ -0,0 +1,121 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ +#ifndef McsMagicTag_PORTOCOL_H +#define McsMagicTag_PORTOCOL_H + +#include "uart.h" +#include "mcs_carrier.h" + +#define RS485_SEND_ENABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = GPIO_PIN_7 +#define RS485_SEND_DISABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = BASE_CFG_UNSET + +#define RX_BUF_LEN (16) +#define SEND_FRAME_DATA_NUM (CUSTDATA_MAX) +/* Service Uart0 Communication Deal */ +#define FRAME_ONE_DATA_LENTH 4 +#define FRAME_ONE_CHAR_LENTH 1 +#define FRAME_RECV_DATA_LENTH 4 +#define FRAME_LENTH 20 /* Data length */ +#define FRAME_SENT 0X8F +#define FRAME_CUSTACK 0X8A +#define FRAME_START 0x0F /* Start frame */ +#define FRAME_END '/' /* StOP frame */ +#define FRAME_CHECK_BEGIN 1 /* Check frame */ +#define FRAME_CHECKSUM 18 /* Check sum */ +#define FRAME_CHECK_NUM 17 +#define CMDCODE_IDLE_FRAME 0x55 /* Fill frame */ +#define CMDCODE_GET_MOTOR_PARAMS 0x01 +#define CMDCODE_SEND_MOTOR_PARAMS 0x02 +#define CMDCODE_SET_MOTOR_CTLMODE 0x03 +#define CMDCODE_SET_OBSERVER_TYPE 0x04 +#define CMDCODE_SET_STARTUP_MODE 0x05 +#define CMDCODE_SET_PID_PARAMS 0x06 +#define CMDCODE_SET_STARTUP_PARAMS 0x07 +#define CMDCODE_SET_OBSERVER_PARAMS 0x08 +#define CMDCODE_SET_MOTOR_TARGETSPD 0x09 +#define CMDCODE_SET_MOTOR_PARAMS 0x0A +#define CMDCODE_MOTOR_START 0x0B +#define CMDCODE_MOTOR_STOP 0x0C +#define CMDCODE_MOTORSTATE_RESET 0x0D +#define CMDCODE_SEND_FIRMVERSION 0x0E +#define CMDCODE_SET_ADJUSTSPD_MODE 0x11 +#define CMDCODE_UART_HANDSHAKE 0x12 +#define CMDCODE_UART_HEARTDETECT 0x13 + +typedef union { + unsigned char typeCh[4]; + float typeF; + int typeI; +} UNIONDATATYPE_DEF; + +typedef enum { + OFFLINE_RES = 0, + OFFLINE_LD, + OFFLINE_LQ, + OFFLINE_PSIF, + OFFLINE_JS, + OFFLINE_NP, + OFFLINE_B, + OFFLINE_KPD, + OFFLINE_KID, + OFFLINE_KPQ, + OFFLINE_KIQ, + OFFLINE_KPS, + OFFLINE_KIS, + OFFLINE_SPEED, + OFLINE_MAX +} OFFLINE_IDEN_TYPE; + +typedef enum { + CURRDQ_Q = 0, + CURRDQ_D, + CURRREFDQ_Q, + CURRREFDQ_D, + CURRSPD, + SPDCMDHZ, + UDC, + POWERBOARDTEMP, + CUST_ERR_CODE, + CURRUVW_U, + CURRUVW_V, + CURRUVW_W, + PWMDUTYUVW_U, + PWMDUTYUVW_V, + PWMDUTYUVW_W, + AXISANGLE, + VDQ_Q, + VDQ_D, + SPDREFHZ, + SENDTIMESTAMP, + CUSTDATA_MAX +} SENDTOHOSTPARAMS; + +typedef struct { + volatile unsigned char code; + volatile UNIONDATATYPE_DEF data[SEND_FRAME_DATA_NUM]; +} CUSTDATATYPE_DEF; + + +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf); +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams); +#endif /* McsMagicTag_PORTOCOL_H */ diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c new file mode 100644 index 00000000..df5e9186 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c @@ -0,0 +1,184 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#include "uart_module.h" +#include "debug.h" +#include "main.h" +#include "baseinc.h" + +/* Buffer size */ +#define UI_TX_BUF_LEN (96) +#define UI_RX_BUF_LEN (96) + +/* Receiving Timeout Interval */ +#define UART_TIME_OUT_MS (100) + +/* Start sending data to host delay after uart connect success */ +#define UART_UPDATA_DELAY_TIME_MS (50) + +/* Data buffer */ +unsigned char g_uartRxBuf[UI_RX_BUF_LEN] = {0}; +unsigned char g_uartTxBuf[UI_TX_BUF_LEN] = {0}; +static unsigned int getdeltaSystickCnt = 0; +static FRAME_Handle g_uartFrame; +/** + * @brief Receive Data Clear. + * @param uartFrame Receice Data. + * @retval None. + */ +static void FrameRecvClear(FRAME_Handle *uartFrame) +{ + /* Clear buffer lenth. */ + uartFrame->buffLen = 0; + uartFrame->timeOutCnt = 0; + uartFrame->frameFlag = 0; + /* Clear received data lenth. */ + uartFrame->rxLen = 0; + /* Clear received flag. */ + uartFrame->rxFlag = 0; + uartFrame->upDataCnt = 0; + uartFrame->rxAckFlag = 0; +} + +/** + * @brief Set Dma status. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void SetUartDmaStatus(MTRCTRL_Handle *mtrCtrl) +{ + /* Delay 50ms start uart Tx DMA . */ + if (mtrCtrl->uartConnectFlag == CONNECTING && g_uartFrame.upDataDelayCnt++ > UART_UPDATA_DELAY_TIME_MS) { + g_uartFrame.txFlag = 1; /* Start send data flag. */ + mtrCtrl->uartConnectFlag = CONNECTED; + g_uartFrame.upDataDelayCnt = 0; + } + if (mtrCtrl->uartConnectFlag == DISCONNECT) { + g_uartFrame.txFlag = 0; /* Stop send data flag. */ + mtrCtrl->uartTimeStamp = 0; + } +} + +/** + * @brief Uart Dma interupt callback func. + * @param handle Uart handle. + * @retval None. + */ +void UART0_TXDMACallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + unsigned int getCurSystickCnt = 0; + static unsigned int getlastSystickCnt = 0; + /* USER CODE BEGIN UART0_WRITE_DMA_FINISH */ + g_uartFrame.txFlag = 1; + /* Received information answered, information update reserved. */ + if (g_uartFrame.rxAckFlag == 1) { + g_uartFrame.uartItTxFlag = 1; + g_uartFrame.rxAckFlag = 0; + } + getCurSystickCnt = DCL_SYSTICK_GetTick(); + if (getlastSystickCnt != 0) { + /* Calculate unit frame data send time */ + getdeltaSystickCnt = getCurSystickCnt - getlastSystickCnt; + } + getlastSystickCnt = getCurSystickCnt; + /* USER CODE END UART0_WRITE_DMA_FINISH */ +} + +/** + * @brief Uart0 Interruput Read CallBack Function. + * @param handle Uart handle. + * @retval None. + */ +void UART0ReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_READ_IT_FINISH */ + if (g_uartFrame.rxLen >= UI_RX_BUF_LEN - 1) { + g_uartFrame.rxLen = 0; + } + HAL_UART_ReadIT(handle, &g_uartFrame.rxData, 1); + g_uartRxBuf[g_uartFrame.rxLen] = g_uartFrame.rxData; + g_uartFrame.rxLen++; + g_uartFrame.rxFlag = 1; + g_uartFrame.uartItTxFlag = 0; + return; + /* USER CODE END UART0_READ_IT_FINISH */ +} + +/** + * @brief Uart Read Data Init Function. + * @param void. + * @retval None. + */ +void UartRecvInit(void) +{ + /* Uart reception initialization */ + FrameRecvClear(&g_uartFrame); + HAL_UART_ReadIT(&g_uart0, &g_uartFrame.rxData, 1); +} + +/** + * @brief Uart Read Data Process Function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SetUartDmaStatus(mtrCtrl); + if (g_uartFrame.rxFlag == 1) { /* Receive data flag. */ + if (g_uartFrame.timeOutCnt++ > UART_TIME_OUT_MS) { + /* Received data from the host. */ + g_uartFrame.frameFlag = 1; + g_uartFrame.rxFlag = 0; + g_uartFrame.timeOutCnt = 0; + /* Execute data process. */ + CUST_DataReceProcss(mtrCtrl, g_uartRxBuf); + g_uartFrame.rxAckFlag = 1; + g_uartFrame.rxLen = 0; + } + } + g_uartFrame.frameFlag = 0; +} + +/** + * @brief Uart Write Data Process Function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + if (g_uartFrame.txFlag == 1) { /* Send data flag. */ + mtrCtrl->uartTimeStamp = (float)getdeltaSystickCnt; /* Unit data time stamp */ + g_uartFrame.upDataCnt = 0; + g_uartFrame.txFlag = 0; + /* Send data to host. */ + unsigned int txLen = CUST_TransmitData(mtrCtrl, g_uartTxBuf); + /* If txIT mode send data finish, convert to DMA mode */ + if (g_uartFrame.uartItTxFlag == 1) { + HAL_UART_WriteDMA(&g_uart0, g_uartTxBuf, txLen); + } + } +} diff --git a/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h new file mode 100644 index 00000000..f1f8f899 --- /dev/null +++ b/vendor/yibaina_3061M/1025_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h @@ -0,0 +1,47 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#ifndef McsMagicTag_UART_MODULE_H +#define McsMagicTag_UART_MODULE_H + +#include "protocol.h" +#include "mcs_ctlmode_config.h" + +typedef struct { + unsigned int buffLen; + unsigned int timeOutCnt; + unsigned char frameFlag; + unsigned int rxLen; + unsigned char rxFlag; + unsigned char txFlag; + unsigned char rxData; + unsigned int upDataCnt; + unsigned int upDataDelayCnt; + unsigned char uartItTxFlag; + unsigned char rxAckFlag; +} FRAME_Handle; + + +void UartRecvInit(void); +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl); +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/feature.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/feature.h new file mode 100644 index 00000000..715371be --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/feature.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-14 14:05:10 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define CHIP_3061MNPICA MACRO_ENABLE + +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 30000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_UART_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/main.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/main.h new file mode 100644 index 00000000..40d65b1d --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/main.h @@ -0,0 +1,98 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.h + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-14 14:05:10 + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_SYSTEM_INIT_H +#define McuMagicTag_SYSTEM_INIT_H + +#include "adc.h" +#include "adc_ex.h" +#include "acmp.h" +#include "acmp_ex.h" +#include "apt.h" +#include "uart.h" +#include "uart_ex.h" +#include "gpio.h" +#include "timer.h" +#include "timer_ex.h" +#include "pga.h" +#include "crg.h" +#include "dma.h" +#include "dma_ex.h" +#include "iocmg.h" + +#define IO_SPEED_FAST 0x00U +#define IO_SPEED_SLOW 0x01U + +#define IO_DRV_LEVEL4 0x00U +#define IO_DRV_LEVEL3 0x01U +#define IO_DRV_LEVEL2 0x02U +#define IO_DRV_LEVEL1 0x03U + +#define XTAL_DRV_LEVEL4 0x03U +#define XTAL_DRV_LEVEL3 0x02U +#define XTAL_DRV_LEVEL2 0x01U +#define XTAL_DRV_LEVEL1 0x00U + +#define GpioStartStop_PIN GPIO_PIN_4 +#define GpioStartStop_HANDLE g_gpio2 + +extern ACMP_Handle g_acmp0; +extern PGA_Handle g_pga0; +extern PGA_Handle g_pga1; +extern TIMER_Handle g_timer0; +extern TIMER_Handle g_timer1; +extern UART_Handle g_uart0; +extern APT_Handle g_apt0; +extern APT_Handle g_apt1; +extern APT_Handle g_apt2; +extern ADC_Handle g_adc0; + +extern DMA_Handle g_dmac; + +extern GPIO_Handle g_gpio2; +extern GPIO_Handle g_gpio1; + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect); +void SystemInit(void); + +void UART0WriteInterruptCallback(void *handle); +void UART0ReadInterruptCallback(void *handle); + +void UART0InterruptErrorCallback(void *handle); +void MotorStatemachineCallBack(void *handle); +void TIMER1_DMAOverFlow_InterruptProcess(void *handle); +void CheckPotentiometerValueCallback(void *handle); +void TIMER0_DMAOverFlow_InterruptProcess(void *handle); +void MotorCarrierProcessCallback(void *aptHandle); +void MotorSysErrCallback(void *aptHandle); + +void UART0_TXDMACallback(void *handle); + +void MotorStartStopKeyCallback(void *param); + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_SYSTEM_INIT_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/system_init.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/system_init.c new file mode 100644 index 00000000..d49cd860 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/generatecode/system_init.c @@ -0,0 +1,677 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file system_init.c + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-14 14:05:10 + */ + +#include "main.h" +#include "ioconfig.h" +#include "iocmg_ip.h" + +#define UART0_BAUD_RATE 1843200 + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) +{ + CRG_Handle crg; + crg.baseAddress = CRG; + crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC; + crg.pllPreDiv = CRG_PLL_PREDIV_4; + crg.pllFbDiv = 48; /* PLL Multiplier 48 */ + crg.pllPostDiv = CRG_PLL_POSTDIV_2; + crg.coreClkSelect = CRG_CORE_CLK_SELECT_PLL; + crg.handleEx.pllPostDiv2 = CRG_PLL_POSTDIV2_3; + crg.handleEx.clk1MSelect = CRG_1M_CLK_SELECT_HOSC; + crg.handleEx.clk1MDiv = (25 - 1); /* The 1 MHz freq is equal to the input clock frequency / (clk_1m_div + 1). 25 is the div of the clk_1m in CLOCK. */ + + if (HAL_CRG_Init(&crg) != BASE_STATUS_OK) { + return BASE_STATUS_ERROR; + } + *coreClkSelect = crg.coreClkSelect; + return BASE_STATUS_OK; +} + +static void DMA_Channel0Init(void *handle) +{ + DMA_ChannelParam dma_param; + dma_param.direction = DMA_MEMORY_TO_PERIPH_BY_DMAC; + dma_param.srcAddrInc = DMA_ADDR_INCREASE; + dma_param.destAddrInc = DMA_ADDR_UNALTERED; + dma_param.srcPeriph = DMA_REQUEST_MEM; + dma_param.destPeriph = DMA_REQUEST_UART0_TX; + dma_param.srcWidth = DMA_TRANSWIDTH_BYTE; + dma_param.destWidth = DMA_TRANSWIDTH_BYTE; + dma_param.srcBurst = DMA_BURST_LENGTH_1; + dma_param.destBurst = DMA_BURST_LENGTH_1; + dma_param.pHandle = handle; + HAL_DMA_InitChannel(&g_dmac, &dma_param, DMA_CHANNEL_ZERO); +} + +static void DMA_Init(void) +{ + HAL_CRG_IpEnableSet(DMA_BASE, IP_CLK_ENABLE); + g_dmac.baseAddress = DMA; + IRQ_Register(IRQ_DMA_TC, HAL_DMA_IrqHandlerTc, &g_dmac); + IRQ_Register(IRQ_DMA_ERR, HAL_DMA_IrqHandlerError, &g_dmac); + IRQ_EnableN(IRQ_DMA_TC); + IRQ_EnableN(IRQ_DMA_ERR); + HAL_DMA_Init(&g_dmac); + DMA_Channel0Init((void *)(&g_uart0)); + HAL_DMA_SetChannelPriorityEx(&g_dmac, DMA_CHANNEL_ZERO, DMA_PRIORITY_HIGHEST); +} + +static void ACMP0_Init(void) +{ + HAL_CRG_IpEnableSet(ACMP0_BASE, IP_CLK_ENABLE); /* ACMP clock bit reset. */ + g_acmp0.baseAddress = ACMP0_BASE; + g_acmp0.inOutConfig.inputNNum = ACMP_INPUT_N_SELECT2; + g_acmp0.inOutConfig.inputPNum = ACMP_INPUT_P_SELECT2; + g_acmp0.inOutConfig.polarity = ACMP_OUT_NOT_INVERT; + g_acmp0.filterCtrl.filterMode = ACMP_FILTER_NONE; + g_acmp0.hysteresisVol = ACMP_HYS_VOL_30MV; + g_acmp0.interruptEn = BASE_CFG_UNSET; + HAL_ACMP_Init(&g_acmp0); +} + +static void ADC0_Init(void) +{ + HAL_CRG_IpEnableSet(ADC0_BASE, IP_CLK_ENABLE); + HAL_CRG_IpClkSelectSet(ADC0_BASE, CRG_ADC_CLK_ASYN_PLL_DIV); + HAL_CRG_IpClkDivSet(ADC0_BASE, CRG_ADC_DIV_1); + + g_adc0.baseAddress = ADC0; + g_adc0.socPriority = ADC_PRIMODE_ALL_ROUND; + + HAL_ADC_Init(&g_adc0); + + SOC_Param socParam = {0}; + socParam.adcInput = ADC_CH_ADCINA0; /* PGA0_OUT(ADC AIN0) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM1, &socParam); + + socParam.adcInput = ADC_CH_ADCINA1; /* PGA1_OUT(ADC AIN1) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM6, &socParam); + + socParam.adcInput = ADC_CH_ADCINA9; /* PIN7(ADC AIN9) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM0, &socParam); + + socParam.adcInput = ADC_CH_ADCINA5; /* PIN2(ADC AIN5) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM3, &socParam); + + socParam.adcInput = ADC_CH_ADCINA15; /* PIN14(ADC AIN15) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM4, &socParam); +} + +__weak void MotorSysErrCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_EVENT_INTERRUPT */ + /* USER CODE END APT0_EVENT_INTERRUPT */ +} + +__weak void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +static void APT0_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_ENABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt0, &protectApt); +} + +static void APT0_Init(void) +{ + HAL_CRG_IpEnableSet(APT0_BASE, IP_CLK_ENABLE); + + g_apt0.baseAddress = APT0; + + /* Clock Settings */ + g_apt0.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt0.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt0.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt0.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt0.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.divInitVal = 0; + g_apt0.waveform.cntInitVal = 0; + g_apt0.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt0.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt0.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt0.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt0.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCA = 375; /* 375 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt0.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCA = 1; + + /* ADC Trigger SOCB */ + g_apt0.adcTrg.trgEnSOCB = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCB = 1; + g_apt0.adcTrg.trgSrcSOCB = APT_CS_SRC_CNTR_CMPB_DOWN; + g_apt0.adcTrg.trgScaleSOCB = 1; + + g_apt0.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + /* Timer Trigger */ + g_apt0.tmrInterrupt.tmrInterruptEn = BASE_CFG_ENABLE; + g_apt0.tmrInterrupt.tmrInterruptSrc = APT_INT_SRC_CNTR_ZERO; + g_apt0.tmrInterrupt.tmrInterruptScale = 1; + + APT0_ProtectInit(); + + HAL_APT_PWMInit(&g_apt0); + HAL_APT_RegisterCallBack(&g_apt0, APT_EVENT_INTERRUPT, MotorSysErrCallback); + IRQ_SetPriority(IRQ_APT0_EVT, 7); /* 7 is priority value */ + IRQ_Register(IRQ_APT0_EVT, HAL_APT_EventIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_EVT); + HAL_APT_RegisterCallBack(&g_apt0, APT_TIMER_INTERRUPT, MotorCarrierProcessCallback); + IRQ_SetPriority(IRQ_APT0_TMR, 5); /* 5 is priority value */ + IRQ_Register(IRQ_APT0_TMR, HAL_APT_TimerIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_TMR); +} + +static void APT1_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt1, &protectApt); +} + +static void APT1_Init(void) +{ + HAL_CRG_IpEnableSet(APT1_BASE, IP_CLK_ENABLE); + + g_apt1.baseAddress = APT1; + + /* Clock Settings */ + g_apt1.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt1.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt1.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt1.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt1.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.divInitVal = 0; + g_apt1.waveform.cntInitVal = 0; + g_apt1.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt1.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt1.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt1.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + APT1_ProtectInit(); + + HAL_APT_PWMInit(&g_apt1); +} + +static void APT2_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt2, &protectApt); +} + +static void APT2_Init(void) +{ + HAL_CRG_IpEnableSet(APT2_BASE, IP_CLK_ENABLE); + + g_apt2.baseAddress = APT2; + + /* Clock Settings */ + g_apt2.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt2.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt2.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt2.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt2.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.divInitVal = 0; + g_apt2.waveform.cntInitVal = 0; + g_apt2.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt2.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt2.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt2.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt2.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + APT2_ProtectInit(); + + HAL_APT_PWMInit(&g_apt2); +} + +__weak void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + BASE_FUNC_UNUSED(handle); +} + +static void GPIO_Init(void) +{ + HAL_CRG_IpEnableSet(GPIO2_BASE, IP_CLK_ENABLE); + g_gpio2.baseAddress = GPIO2; + + g_gpio2.pins = GPIO_PIN_3; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_NONE); + + g_gpio2.pins = GPIO_PIN_4; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_INPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_LOW_LEVEL); + + HAL_CRG_IpEnableSet(GPIO1_BASE, IP_CLK_ENABLE); + g_gpio1.baseAddress = GPIO1; + + g_gpio1.pins = GPIO_PIN_0; + HAL_GPIO_Init(&g_gpio1); + HAL_GPIO_SetDirection(&g_gpio1, g_gpio1.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio1, g_gpio1.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio1, g_gpio1.pins, GPIO_INT_TYPE_NONE); + + HAL_GPIO_RegisterCallBack(&g_gpio2, GPIO_PIN_4, MotorStartStopKeyCallback); + IRQ_Register(IRQ_GPIO2, HAL_GPIO_IrqHandler, &g_gpio2); + IRQ_SetPriority(IRQ_GPIO2, 1); /* set gpio1 interrupt priority to 1, 1~15. 1 is priority value */ + IRQ_EnableN(IRQ_GPIO2); /* gpio interrupt enable */ + + return; +} + +static void PGA0_Init(void) +{ + HAL_CRG_IpEnableSet(PGA0_BASE, IP_CLK_ENABLE); + + g_pga0.baseAddress = PGA0_BASE; + g_pga0.externalResistorMode = BASE_CFG_ENABLE; + g_pga0.handleEx.extCapCompensation = PGA_EXT_COMPENSATION_2X; + HAL_PGA_Init(&g_pga0); +} + +static void PGA1_Init(void) +{ + HAL_CRG_IpEnableSet(PGA1_BASE, IP_CLK_ENABLE); + + g_pga1.baseAddress = PGA1_BASE; + g_pga1.externalResistorMode = BASE_CFG_ENABLE; + g_pga1.handleEx.extCapCompensation = PGA_EXT_COMPENSATION_2X; + HAL_PGA_Init(&g_pga1); +} + +__weak void CheckPotentiometerValueCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN CheckPotentiometerValueCallback */ + /* USER CODE END CheckPotentiometerValueCallback */ +} + +static void TIMER0_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER0_BASE, IP_CLK_ENABLE); /* TIMER0 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER0) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 1000000; + + g_timer0.baseAddress = TIMER0; + g_timer0.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer0.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer0.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer0.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer0.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer0.interruptEn = BASE_CFG_ENABLE; + g_timer0.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer0.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer0); + IRQ_Register(IRQ_TIMER0, HAL_TIMER_IrqHandler, &g_timer0); + + HAL_TIMER_RegisterCallback(&g_timer0, TIMER_PERIOD_FIN, CheckPotentiometerValueCallback); + IRQ_SetPriority(IRQ_TIMER0, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_TIMER0); +} + +__weak void MotorStatemachineCallBack(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN MotorStatemachineCallBack */ + /* USER CODE END MotorStatemachineCallBack */ +} + +static void TIMER1_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER1_BASE, IP_CLK_ENABLE); /* TIMER1 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER1) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 500; + + g_timer1.baseAddress = TIMER1; + g_timer1.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer1.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer1.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer1.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer1.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer1.interruptEn = BASE_CFG_ENABLE; + g_timer1.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer1.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer1); + IRQ_Register(IRQ_TIMER1, HAL_TIMER_IrqHandler, &g_timer1); + + HAL_TIMER_RegisterCallback(&g_timer1, TIMER_PERIOD_FIN, MotorStatemachineCallBack); + IRQ_SetPriority(IRQ_TIMER1, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_TIMER1); +} + +__weak void UART0InterruptErrorCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_TRNS_IT_ERROR */ + /* USER CODE END UART0_TRNS_IT_ERROR */ +} + +__weak void UART0_TXDMACallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_WRITE_DMA_FINISH */ + /* USER CODE END UART0_WRITE_DMA_FINISH */ +} + +__weak void UART0WriteInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_WRITE_IT_FINISH */ + /* USER CODE END UART0_WRITE_IT_FINISH */ +} + +__weak void UART0ReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_READ_IT_FINISH */ + /* USER CODE END UART0_READ_IT_FINISH */ +} + +static void UART0_Init(void) +{ + HAL_CRG_IpEnableSet(UART0_BASE, IP_CLK_ENABLE); /* UART0 clock enable. */ + g_uart0.baseAddress = UART0; + + g_uart0.baudRate = UART0_BAUD_RATE; + g_uart0.dataLength = UART_DATALENGTH_8BIT; + g_uart0.stopBits = UART_STOPBITS_ONE; + g_uart0.parity = UART_PARITY_NONE; + g_uart0.txMode = UART_MODE_DMA; + g_uart0.rxMode = UART_MODE_INTERRUPT; + g_uart0.fifoMode = BASE_CFG_ENABLE; + g_uart0.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart0.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart0.hwFlowCtr = BASE_CFG_DISABLE; + g_uart0.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart0.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart0); + HAL_UART_RegisterCallBack(&g_uart0, UART_TRNS_IT_ERROR, (UART_CallbackType)UART0InterruptErrorCallback); + HAL_UART_RegisterCallBack(&g_uart0, UART_READ_IT_FINISH, (UART_CallbackType)UART0ReadInterruptCallback); + IRQ_Register(IRQ_UART0, HAL_UART_IrqHandler, &g_uart0); + IRQ_SetPriority(IRQ_UART0, 6); /* 6 is priority value */ + IRQ_EnableN(IRQ_UART0); + g_uart0.dmaHandle = &g_dmac; + g_uart0.uartDmaTxChn = 0; + HAL_UART_RegisterCallBack(&g_uart0, UART_WRITE_DMA_FINISH, (UART_CallbackType)UART0_TXDMACallback); + HAL_UART_RegisterCallBack(&g_uart0, UART_WRITE_IT_FINISH, (UART_CallbackType)UART0WriteInterruptCallback); +} + +static void IOConfig(void) +{ + SYSCTRL0->SC_SYS_STAT.BIT.update_mode = 0; + SYSCTRL0->SC_SYS_STAT.BIT.update_mode_clear = 1; + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN1 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_7_AS_ACMP0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_7_AS_ACMP0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_7_AS_ACMP0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_7_AS_ACMP0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_7_AS_ACMP0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN48 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_6_AS_ACMP_N2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_6_AS_ACMP_N2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_6_AS_ACMP_N2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_6_AS_ACMP_N2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_6_AS_ACMP_N2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN47 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_5_AS_ACMP_P2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_5_AS_ACMP_P2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_5_AS_ACMP_P2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_5_AS_ACMP_P2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_5_AS_ACMP_P2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN4 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_6_AS_PGA0_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_6_AS_PGA0_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_6_AS_PGA0_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_6_AS_PGA0_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_6_AS_PGA0_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN5 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_5_AS_PGA0_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_5_AS_PGA0_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_5_AS_PGA0_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_5_AS_PGA0_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_5_AS_PGA0_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN3 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_7_AS_PGA0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_7_AS_PGA0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_7_AS_PGA0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_7_AS_PGA0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_7_AS_PGA0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN7 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_7_AS_ADC_AIN9); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_7_AS_ADC_AIN9, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_7_AS_ADC_AIN9, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_7_AS_ADC_AIN9, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_7_AS_ADC_AIN9, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN2 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO5_1_AS_ADC_AIN5); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO5_1_AS_ADC_AIN5, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO5_1_AS_ADC_AIN5, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO5_1_AS_ADC_AIN5, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO5_1_AS_ADC_AIN5, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN14 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_7_AS_ADC_AIN15); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_7_AS_ADC_AIN15, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_7_AS_ADC_AIN15, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_7_AS_ADC_AIN15, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_7_AS_ADC_AIN15, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN11 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_5_AS_PGA1_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_5_AS_PGA1_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_5_AS_PGA1_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_5_AS_PGA1_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_5_AS_PGA1_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN12 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_6_AS_PGA1_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_6_AS_PGA1_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_6_AS_PGA1_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_6_AS_PGA1_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_6_AS_PGA1_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN13 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_7_AS_PGA1_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_7_AS_PGA1_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_7_AS_PGA1_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_7_AS_PGA1_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_7_AS_PGA1_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN35 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_3_AS_GPIO2_3); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_3_AS_GPIO2_3, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_3_AS_GPIO2_3, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_3_AS_GPIO2_3, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_3_AS_GPIO2_3, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN27 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_0_AS_GPIO1_0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_0_AS_GPIO1_0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_0_AS_GPIO1_0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_0_AS_GPIO1_0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_0_AS_GPIO1_0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN41 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_4_AS_GPIO2_4); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_4_AS_GPIO2_4, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_4_AS_GPIO2_4, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_4_AS_GPIO2_4, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_4_AS_GPIO2_4, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN19 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_0_AS_APT0_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_0_AS_APT0_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_0_AS_APT0_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_0_AS_APT0_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_0_AS_APT0_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN23 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_0_AS_APT0_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_0_AS_APT0_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_0_AS_APT0_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_0_AS_APT0_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_0_AS_APT0_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN20 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_1_AS_APT1_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_1_AS_APT1_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_1_AS_APT1_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_1_AS_APT1_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_1_AS_APT1_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN24 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_1_AS_APT1_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_1_AS_APT1_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_1_AS_APT1_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_1_AS_APT1_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_1_AS_APT1_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN21 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_2_AS_APT2_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_2_AS_APT2_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_2_AS_APT2_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_2_AS_APT2_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_2_AS_APT2_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN25 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_2_AS_APT2_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_2_AS_APT2_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_2_AS_APT2_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_2_AS_APT2_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_2_AS_APT2_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ +} + +static void APT_SyncMasterInit(void) +{ + HAL_APT_MasterSyncInit(&g_apt0, APT_SYNC_OUT_ON_CNTR_ZERO); +} + +static void APT_SyncSlaveInit(void) +{ + APT_SlaveSyncIn aptSlave; + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt1, &aptSlave); + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt2, &aptSlave); + +} + +void SystemInit(void) +{ + IOConfig(); + DMA_Init(); + UART0_Init(); + ACMP0_Init(); + APT0_Init(); + APT1_Init(); + APT2_Init(); + ADC0_Init(); + PGA0_Init(); + PGA1_Init(); + TIMER0_Init(); + TIMER1_Init(); + GPIO_Init(); + + APT_SyncMasterInit(); + APT_SyncSlaveInit(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/main.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/main.c new file mode 100644 index 00000000..d6ab767c --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/main.c @@ -0,0 +1,71 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + * @date 2025-04-14 14:05:10 + */ + +#include "typedefs.h" +#include "feature.h" +#include "mcs_motor_process.h" +#include "main.h" +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ +/* USER CODE END 0 */ +ACMP_Handle g_acmp0; +PGA_Handle g_pga0; +PGA_Handle g_pga1; +TIMER_Handle g_timer0; +TIMER_Handle g_timer1; +UART_Handle g_uart0; +APT_Handle g_apt0; +APT_Handle g_apt1; +APT_Handle g_apt2; +ADC_Handle g_adc0; +DMA_Handle g_dmac; +GPIO_Handle g_gpio2; +GPIO_Handle g_gpio1; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ +/* USER CODE END 1 */ + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + /* USER CODE END 2 */ + MotorMainProcess(); + /* USER CODE BEGIN 3 */ + /* 建议用户放置初始配置代码 */ + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + /* 建议用户放置周期性执行代码 */ + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h new file mode 100644 index 00000000..dea3ad66 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h @@ -0,0 +1,142 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration for carrier interrupt processing function. + */ +#ifndef McuMagicTag_MCS_CARRIER_H +#define McuMagicTag_MCS_CARRIER_H + +#include "mcs_status.h" +#include "mcs_mtr_param.h" +#include "mcs_svpwm.h" +#include "mcs_curr_ctrl.h" +#include "mcs_if_ctrl.h" +#include "mcs_ramp_mgmt.h" +#include "mcs_spd_ctrl.h" +#include "mcs_fosmo.h" +#include "mcs_smo_4th.h" +#include "mcs_pll.h" +#include "mcs_startup.h" +#include "mcs_r1_svpwm.h" +#include "mcs_fw_ctrl.h" +#include "mcs_prot_user.h" + +typedef void (*MCS_ReadCurrUvwCb)(UvwAxis *CurrUvw); +typedef void (*MCS_SetPwmDutyCb)(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight); +typedef void (*MCS_SetADCTriggerTimeCb)(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB); + +/** + * @brief motor control FSM state define. + * @details motor control FSM state type: + * + FSM_IDLE -- IDLE state, system startup default. + * + FSM_OFFSET_CALIB -- Self calibrate, for ADC init. + * + FSM_CAP_CHARGE -- IPM cap charge. + * + FSM_CLEAR -- Clear before every run. + * + FSM_LOCATE -- Rotor position pre-locate. + * + FSM_STARTUP -- Start up. + * + FSM_SWITCH -- Transition state, control from open to closed loop. + * + FSM_RUN -- Normal running state. + * + FSM_WAIT_STOP -- Wait stopping. + * + FSM_STOP -- Normal stop. + * + FSM_FAULT -- Fault state, waiting for user process. + */ +typedef enum { + FSM_IDLE = 0, + FSM_OFFSET_CALIB, + FSM_CAP_CHARGE, + FSM_CLEAR, + FSM_LOCATE, + FSM_STARTUP, + FSM_SWITCH, + FSM_RUN, + FSM_WAIT_STOP, + FSM_STOP, + FSM_FAULT +} FsmState; + +/** + * @brief Sampling mode. + */ +typedef enum { + DUAL_RESISTORS = 0, + SINGLE_RESISTOR = 1 +} SampleMode; + +/** + * @brief Motor control data structure + */ +typedef struct { + unsigned char motorStateFlag; /**< Motor start/stop status flag. */ + float spdCmdHz; /**< External input speed command value. */ + float axisAngle; /**< Angle of the synchronous coordinate system. */ + float spdRefHz; /**< Command value after speed ramp management. */ + float currCtrlPeriod; /**< current loop control period. */ + float adc0Compensate; /**< ADC0 softwaretrim compensate value. */ + float adc1Compensate; /**< ADC1 softwaretrim compensate value. */ + float udc; /**< Bus voltage. */ + float powerBoardTemp; /**< Power boart surface temperature. */ + unsigned short aptMaxcntCmp; /**< Apt Maximum Comparison Count. */ + float adcCurrCofe; /**< Adc current sampling cofeature. */ + + unsigned short sysTickCnt; /**< System Timer Tick Count. */ + unsigned short capChargeTickNum; /**< Bootstrap Capacitor Charge Tick Count. */ + volatile unsigned int msTickCnt; /**< Millisecond-level counter, which can be used in 1-ms and 5-ms tasks. */ + unsigned short msTickNum; /**< Number of ticks corresponding to 1 ms. */ + char obserType; /**< Set Observer Type. */ + char controlMode; /**< Set foc control or sixstep bldc control mode or others. */ + char spdAdjustMode; /**< Set speed adjust mode. */ + char uartConnectFlag; /**< Uart connect success flag. */ + short uartHeartDetCnt; /**< Uart connect heart detect count. */ + float uartTimeStamp; /**< Uart data time stamp. */ + SysStatusReg statusReg; /**< System status. */ + FsmState stateMachine; /**< Motor Control State Machine. */ + + SampleMode sampleMode; /**< Current sampling mode setting: single resistor, double resistor. */ + MOTOR_Param mtrParam; /**< Motor parameters. */ + FOSMO_Handle smo; /**< SMO observer handle. */ + SMO4TH_Handle smo4th; /**< SMO 4th observer handle. */ + IF_Handle ifCtrl; /**< I/F control handle. */ + SVPWM_Handle sv; /**< Dual-resistance/three-resistance sampling SVPWM Handle. */ + R1SVPWM_Handle r1Sv; /**< Single-resistance phase-shifted SVPWM handle. */ + RMG_Handle spdRmg; /**< Ramp management struct for the speed controller input reference. */ + SPDCTRL_Handle spdCtrl; /**< Speed loop Control Handle. */ + CURRCTRL_Handle currCtrl; /**< Current loop control handle. */ + STARTUP_Handle startup; /**< Startup Switch Handle. */ + FW_Handle fw; /**< Flux-Weakening Handle. */ + + DqAxis idqRef; /**< Command value of the dq axis current. */ + UvwAxis currUvw; /**< Three-phase current sampling value. */ + AlbeAxis iabFbk; /**< αβ-axis current feedback value. */ + DqAxis idqFbk; /**< Current feedback value of the dq axis. */ + DqAxis vdqRef; /**< Current loop output dq voltage. */ + AlbeAxis vabRef; /**< Current loop output voltage αβ. */ + UvwAxis dutyUvw; /**< UVW three-phase duty cycle. */ + UvwAxis dutyUvwLeft; /**< Single Resistor UVW Three-Phase Left Duty Cycle. */ + UvwAxis dutyUvwRight; /**< Single Resistor UVW Three-Phase Right Duty Cycle. */ + + MCS_ReadCurrUvwCb readCurrUvwCb; /**< Read current callback function. */ + MCS_SetPwmDutyCb setPwmDutyCb; /**< Set the duty cycle callback function. */ + MCS_SetADCTriggerTimeCb setADCTriggerTimeCb; /**< Sets the ADC trigger point callback function. */ + + MotorProtStatus_Handle prot; /**< Motor protect status detection flag bit handle. */ +} MTRCTRL_Handle; + +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h new file mode 100644 index 00000000..38c00b5d --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h @@ -0,0 +1,76 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_chip_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H/ECBMCU201MPC app. + */ + +#ifndef McuMagicTag_MCS_CHIPCONFIG_H +#define McuMagicTag_MCS_CHIPCONFIG_H + +#include "feature.h" + +#if defined (CHIP_3061MNPICA) || defined (CHIP_3061MNPIKA) || defined (CHIP_3061MNNICA) || \ + defined (CHIP_3061MNNIKA) || defined (CHIP_3061MNPIC8) || defined(CHIP_3061MNNIC8) || \ + defined (CHIP_3061MNPIK8) || defined (CHIP_3061MNNIK8) + + #define ADCPTT_HANDLE g_adc0 + #define ADCRESIS_HANDLE g_adc0 + #define ADCUDC_HANDLE g_adc0 + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc0 + #define LED1_HANDLE g_gpio2 + #define LED2_HANDLE g_gpio1 + #define LED2_PIN GPIO_PIN_0 + #define LED1_PIN GPIO_PIN_3 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCUSOCNUM ADC_SOC_NUM1 + #define ADCRESISSOCNUM ADC_SOC_NUM3 + #define ADCUDCSOCNUM ADC_SOC_NUM4 + #define ADCWSOCNUM ADC_SOC_NUM6 + + #define ADC0COMPENSATE 2037.0f + #define ADC1COMPENSATE 2027.0f + +#endif + +#if defined (CHIP_3065HRPIRZ) || defined (CHIP_3065ARPIRZ) || defined (CHIP_3066MNPIRH) || \ + defined (CHIP_3065PNPIRH) || defined (CHIP_3065PNPIRE) || defined (CHIP_3065PNPIRA) + + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc1 + #define ADCRESIS_HANDLE g_adc2 + #define ADCUDC_HANDLE g_adc2 + #define ADCPTT_HANDLE g_adc2 + #define LED1_HANDLE g_gpio0 + #define LED2_HANDLE g_gpio0 + #define LED2_PIN GPIO_PIN_6 + #define LED1_PIN GPIO_PIN_7 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCRESISSOCNUM ADC_SOC_NUM1 + #define ADCUSOCNUM ADC_SOC_NUM8 + #define ADCWSOCNUM ADC_SOC_NUM8 + #define ADCUDCSOCNUM ADC_SOC_NUM14 + + #define ADC0COMPENSATE 2033.0f + #define ADC1COMPENSATE 2070.0f + +#endif + + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h new file mode 100644 index 00000000..2a6f38cc --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h @@ -0,0 +1,73 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_ctlmode_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H app. + */ + + /* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_CTLMODECONFIG_H +#define McuMagicTag_MCS_CTLMODECONFIG_H + +#include "debug.h" +#include "typedefs.h" + +typedef enum { + FOC_STARTUP_IF = 0, + FOC_STARTUP_VF, + FOC_STARTUP_HFI +} MOTOR_STARTUPMODE_CONFIG; + +typedef enum { + FOC_OBSERVERTYPE_SMO1TH = 0, + FOC_OBSERVERTYPE_SMO1TH_PLL, + FOC_OBSERVERTYPE_SMO4TH, + FOC_OBSERVERTYPE_SMO4TH_PLL, + FOC_OBSERVERTYPE_LUNBORG, + FOC_OBSERVERTYPE_FLUX +} MOTOR_OBSERVERTYPE_CONFIG; + +typedef enum { + FOC_CONTROLMODE_SPEED = 0, + FOC_CONTROLMODE_TORQUE +} MOTOR_CONTROLMODE_CONFIG; + +typedef enum { + FOC_CURQAXISPID_PARAMS = 0, + FOC_CURDAXISPID_PARAMS, + FOC_SPDPID_PARAMS +} MOTOR_PID_SET; + +typedef enum { + MOTOR_PARAMS_BASE = 0, + MOTOR_PARAMS_SPECIAL, + MOTOR_PARAMS_BOARD +} MOTOR_PARAMS_SET; + +typedef enum { + CUST_SPEED_ADJUST = 0, + HOST_SPEED_ADJUST +} MODE_ADSPEED_CONFIG; + +typedef enum { + CONNECTING = 0, + CONNECTED, + DISCONNECT +} UART_STATUS; + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h new file mode 100644 index 00000000..783bf214 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h @@ -0,0 +1,45 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.h + * @author MCU Algorithm Team + * @brief This file provides motor sample functions declaration for ECMCU105H board. + */ +#ifndef McuMagicTag_MCS_MOTOR_PROCESS_H +#define McuMagicTag_MCS_MOTOR_PROCESS_H + +/** + * @brief phase sequence. + */ +typedef enum { + PHASE_U = 0, + PHASE_V, + PHASE_W, + PHASE_MAX_NUM +} MCS_PhaseEnum; + +/** + * @brief key state. + */ +typedef enum { + KEY_DOWN = 0, + KEY_UP = 1, +} KEY_State; + +int MotorMainProcess(void); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h new file mode 100644 index 00000000..19510c78 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h @@ -0,0 +1,188 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_status.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_STATUS_H +#define McuMagicTag_MCS_STATUS_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "typedefs.h" +#include "mcs_assert.h" + +/* Typedef definitions ------------------------------------------------------------------------- */ +/** + * @brief System status define + */ +typedef union { + unsigned short all; + struct { + unsigned short cmdStart : 1; /**< Indicates that a start system command has been received. */ + unsigned short cmdStop : 1; /**< Indicates that a stop system command has been received. */ + unsigned short isRunning : 1; /**< Indicates that the system is running (enable signal) */ + unsigned short sysError : 1; /**< Indicates that the system reports an error. */ + unsigned short poweron : 1; /**< Indicates that the power-on initialization phase is complete. */ + unsigned short capcharge : 1; /**< Indicates that the bootstrap capacitor charging phase is complete. */ + unsigned short adczero : 1; /**< The current sampling point is reset to zero after power-on. */ + } Bit; +} SysStatusReg; + +/** + * @brief Get status of Bit cmdStart. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStart(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStart == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStart. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStartSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 1; +} + +/** + * @brief Clear Bit cmdStart. + * @param handle System status register handle. + * @retval None. + */ +static inline void SysCmdStartClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 0; +} + +/** + * @brief Get status of Bit cmdStop. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStop(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStop == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 1; +} + +/** + * @brief Clear Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 0; +} + +/** + * @brief Get status of Bit isRunning. + * @param sysStatus System status register handle. + * @retval Status of Bit isRunning. + */ +static inline bool SysIsRunning(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.isRunning == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 1; +} + +/** + * @brief Clear Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 0; +} + +/** + * @brief Get status of Bit sysError. + * @param sysStatus System status register handle. + * @retval Status of Bit sysError. + */ +static inline bool SysIsError(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.sysError == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 1; +} + +/** + * @brief Clear Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 0; +} + +#endif diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h new file mode 100644 index 00000000..8d4cb216 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h @@ -0,0 +1,108 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_user_config.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of user config parameters. + */ +#ifndef McuMagicTag_MCS_CONFIG_H +#define McuMagicTag_MCS_CONFIG_H + +#include "debug.h" +#include "typedefs.h" + +#define SMO4TH + +#define SYSTICK_PERIOD_US 500u /* systick period. */ + +#define INV_CAP_CHARGE_MS 3u /* Capacitor charging time. */ + +#define INV_VOLTAGE_BUS 24.0f /* Bus voltage, V. */ + +#define CTRL_CURR_PERIOD 0.0001f /* carrier ISR period, 100us. */ +#define CTRL_SYSTICK_PERIOD 0.0005f /* systick control period, 500us. */ + +/* Duty of sample window, the real time is 0.06*50us = 3us. */ +#define SAMPLE_WINDOW_DUTY 0.06f + +/* Duty of sample point shift as flip point, the real time is 0.008*50us = 0.4us. */ +#define SAMPLE_POINT_SHIFT 0.008f + +/* Sampling resistance 200mOhm 0.0013295 */ +#define ADC_CURR_COFFI 0.0013295f /* 3.3/4096/3.03/0.2 pga: 3.03, 200mohm. */ + +#define APT_U APT0_BASE /* Base address of U phase APT module. */ +#define APT_V APT1_BASE /* Base address of V phase APT module. */ +#define APT_W APT2_BASE /* Base address of W phase APT module. */ + +/* FOSMO */ +#define FOSMO_GAIN 4.0f /* SMO gain */ +#define FOSMO_LAMBDA 2.0f /* SMO coefficient of cut-off frequency, its value = lambda * we. */ +#define FOSMO_EMF_CUTOFF_FREQ 2.0f /* SMO back emf cutoff frequency. */ +#define SPEED_FILTER_CUTOFF_FREQUENCY 40.0f /* SMO speed cutoff frequency of speed filter. */ +#define FOSMO_PLL_BDW 30.0f /* SMO PLL bandwidth. */ + +/* SMO4TH */ +#define SMO4TH_PLL_BDW 30.0f /* SMO4TH PLL Bandwidth. */ +#define SMO4TH_KD 300.0f /* SMO4TH parameters KD. */ +#define SMO4TH_KQ 600.0f /* SMO4TH parameters KQ. */ +#define SMO4TH_SPD_FILTER_CUTOFF_FREQ 40.0f /* SMO4TH speed cutoff frequency of speed filter. */ + +/* User_Commond */ +#define CTRL_IF_CURR_AMP_A 0.7f /* IF control current amplitude. */ +#define USER_TARGET_SPD_HZ 100.0f /* User-defined target speed value. */ +#define USER_SWITCH_SPDBEGIN_HZ 30.0f /* Start of handover interval. */ +#define USER_SWITCH_SPDEND_HZ (USER_SWITCH_SPDBEGIN_HZ + 3.0f) /* End of handover period. */ +#define USER_MAX_SPD_HZ 29.0f /* User-defined maximum speed value. */ +#define USER_MIN_SPD_HZ 5.0f /* User-defined minimum speed value. */ +#define USER_SPD_SLOPE 50.0f /* slope of velocity change. */ +#define USER_CURR_SLOPE (CTRL_IF_CURR_AMP_A * 10.0f) /* Current change slope. */ + +/* PID PARAMS */ +#define CURRQAXIS_KP 5.023202f /* Current loop Q axis Kp. */ +#define CURRQAXIS_KI 20612.84f /* Current loop Q axis Ki. */ +#define CURRDAXIS_KP 3.477114f /* Current loop D axis Kp. */ +#define CURRDAXIS_KI 20612.84f /* Current loop D axis Ki. */ +/* Current loop PID output lower limit. */ +#define CURR_LOWERLIM (-INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.98f) +/* Current loop PID output upper limit. */ +#define CURR_UPPERLIM (INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.98f) + +#define SPD_KP 0.00505f /* Speed loop Kp. */ +#define SPD_KI 0.012f /* Speed loop Ki. */ +#define SPD_LOWERLIM (-0.105f) /* Speed loop PID output lower limit. */ +#define SPD_UPPERLIM 0.105f /* Speed loop PID output upper limit. */ + +/* MOTOR PARAMS */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift. */ +/* mtrPsif & mtrJ parameter is not used in this project, temporarily set to 0. */ +#define MOTORPARAM_DEFAULTS { \ + .mtrNp = 14, \ + .mtrRs = 10.1f, \ + .mtrLd = 0.010f, \ + .mtrLq = 0.010f, \ + .mtrPsif = 0.0f, \ + .mtrJ = 0.0f, \ + .maxElecSpd = 29.0f, \ + .maxCurr = 1.0f, \ + .busVolt = INV_VOLTAGE_BUS, \ +} + +/* Bus voltage sampling conversion factor. */ +#define ADC_UDC_COFFI 0.01289f /* 0.01289 = 3.3/4096*192/12. */ + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c new file mode 100644 index 00000000..99766bdf --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c @@ -0,0 +1,43 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.c + * @author MCU Algorithm Team + * @brief This file contains protection common api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt.h" +#include "mcs_assert.h" + +/** + * @brief Safty-pulse-off function execution to turn off all the power devices. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void ProtSpo_Exec(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /**< Turn off all the six power devices of the inverter. */ + for (unsigned int i = 0; i < MOTOR_PHASE_NUMBER; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_ForcePWMOutputLow(aptx); + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h new file mode 100644 index 00000000..104a5dec --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h @@ -0,0 +1,136 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.h + * @author MCU Algorithm Team + * @brief This file contains protection function common data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_CMM_H +#define McuMagicTag_MCS_PROT_CMM_H + +#include "typedefs.h" +#include "apt_ip.h" + +/* Macro definitions --------------------------------------------------------------------------- */ +#define MOTOR_PHASE_NUMBER (3) + +#define PROT_VAL_THRESHOLD_NUMS (4) +#define PROT_VAL_THRESHOLD_0 (0) +#define PROT_VAL_THRESHOLD_1 (1) +#define PROT_VAL_THRESHOLD_2 (2) +#define PROT_VAL_THRESHOLD_3 (3) + +#define PROT_LIMIT_TIME_NUMS (3) +#define PROT_LIMIT_TIME_0 (0) +#define PROT_LIMIT_TIME_1 (1) +#define PROT_LIMIT_TIME_2 (2) + +#define MOTOR_PHASE_NUMBER (3) + +/**< Motor error status definition. */ +typedef union { + int all; + struct { + unsigned short overCurrErr : 1; /**< Indicates that phase current(s) is over protected value. */ + unsigned short overVoltErr : 1; /**< Indicates that dc-link voltage is over protected value. */ + unsigned short lowerVoltErr : 1; /**< Indicates that dc-link voltage is lower than protected value */ + unsigned short overIpmTempErr : 1; /**< Indicates that IPM temperature is over protected value. */ + unsigned short revRotErr : 1; /**< Indicates that motor negtive direction. */ + unsigned short motorStalling : 1; /**< Indicates that rotor is stalling. */ + unsigned short overMotorTempErr : 1; /**< Indicates that three phase currents is out-of-balance. */ + unsigned short posSnsrCommsErr : 1; /**< Indicates that position sensor communication is lost with MCU. */ + unsigned short posSnsrFuncErr : 1; /**< Indicates that position sensor reports function error. */ + unsigned short posSnsrCalibrErr : 1; /**< Indicates that position sensor fails to calibrate itself. */ + unsigned short currOutOfBalance : 1; /**< Indicates that the rotor is reverse rotation.*/ + unsigned short phsOpenErr : 1; /**< Indicates that phase winding(s) is open. */ + unsigned short phsU : 1; /**< Indicates that u phase fails when phsOpenErr occurs. */ + unsigned short phsV : 1; /**< Indicates that v phase fails when phsOpenErr occurs. */ + unsigned short phsW : 1; /**< Indicates that w phase fails when phsOpenErr occurs. */ + unsigned short multiPhs : 1; /**< Indicates that multi-phases fail when phsOpenErr occurs.*/ + } Bit; +} MotorErrStatusReg; + +/**< Protection Status Bit Definition */ +typedef enum { + OCP_ERR_BIT, + OVP_ERR_BIT, + LVP_ERR_BIT, + OTP_IPM_ERR_BIT, + OTP_MOTOR_ERR_BIT, + STALLING_ERR_BIT, + CURR_OUT_BALANCE_ERR_BIT, + POS_COMMS_ERR_BIT, + POS_FUNC_ERR_BIT, + POS_CALIB_ERR_BIT, + REV_ROT_ERR_BIT, + PHS_OPEN_ERR_BIT, + PHS_U_ERR_BIT, + PHS_V_ERR_BIT, + PHS_W_ERR_BIT, + PHS_MULTI_ERR_BIT, +} PROT_ErrBit; + +/**< Motor error protection level. */ +typedef enum { + PROT_LEVEL_0 = 0, + PROT_LEVEL_1, + PROT_LEVEL_2, + PROT_LEVEL_3, + PROT_LEVEL_4 /**< The greater level number, the severe error is. */ +} PROT_Level; + +/** + * @brief Obtains the status of a bit of data. + * @param data data. + * @param bits Number of digits. + * @retval Bit status. + */ +static inline bool GetBit(int data, unsigned short bit) +{ + bool ret; + ret = ((data >> bit) & 1); + return ret; +} + +/** + * @brief Sets the status of a bit of data. + * @param data data. + * @param bit The setted bit. + * @retval None. + */ +static inline void SetBit(int *data, unsigned char bit) +{ + *data |= (1 << bit); +} + +/** + * @brief Clear the status of a bit of data. + * @param data data. + * @param bit The Clear bit. + * @retval None. + */ +static inline void ClearBit(int *data, unsigned char bit) +{ + *data &= ~(1 << bit); +} + +/**< Protection action. */ +void ProtSpo_Exec(APT_RegStruct **aptAddr); + +#endif diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c new file mode 100644 index 00000000..e97876b7 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c @@ -0,0 +1,137 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.c + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Get motor over current error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overCurrErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor lower dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.lowerVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Ipm temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overIpmTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Motor temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overMotorTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor stalling error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.motorStalling) { + return true; + } else { + return false; + } +} + +/** + * @brief Clear the motor error status. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + /* Clear the motor error status. */ + motorProt->motorErrStatus.all = 0x00; + OCP_Clear(&motorProt->ocp); + OVP_Clear(&motorProt->ovp); + LVP_Clear(&motorProt->lvp); + OTP_Clear(&motorProt->otp); +} + +/** + * @brief Motor protection function initialization. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void MotorProt_Init(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + motorProt->motorErrStatus.all = 0x00; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h new file mode 100644 index 00000000..365110e1 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h @@ -0,0 +1,54 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.h + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_H +#define McuMagicTag_MCS_PROT_USER_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_curr_prot.h" +#include "mcs_dc_volt_prot.h" +#include "mcs_temp_prot.h" +#include "mcs_motor_stalling.h" +#include "typedefs.h" + +typedef struct { + MotorErrStatusReg motorErrStatus; /**< Motor error status. */ + OCP_Handle ocp; /**< Over current protection. */ + OVP_Handle ovp; /**< Over dc-link voltage protection. */ + LVP_Handle lvp; /**< Lower dc-link voltage protection. */ + OTP_Handle otp; /**< Over IPM temperature protection. */ + STP_Handle stall; /**< Motor stalling protection. */ +} MotorProtStatus_Handle; + +void MotorProt_Init(MotorProtStatus_Handle *motorProt); + +/**< Inquiry motor error status */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus); +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus); +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h new file mode 100644 index 00000000..832cd1be --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h @@ -0,0 +1,125 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user_config.h + * @author MCU Algorithm Team + * @brief This file contans user macro definition of the protection function. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_CONFIG_H +#define McuMagicTag_MCS_PROT_USER_CONFIG_H + +/* Macro definitions --------------------------------------------------------------------------- */ +/**< COMMON */ +/**< Peak phase current (A) of the motor or IPM under continuous operations. */ +#define PROT_MOTOR_RATED_CURR (1.0f) +/**< Only several continuous fault detection can trigger error status. */ +#define PROT_CNT_LIMIT (100) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define RECY_CNT_LIMIT (10000) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define OVER_VOLT_RECY_CNT_LIMIT (100) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define LOWER_VOLT_RECY_CNT_LIMIT (100) + +/**< Over current protection */ +/**< Over current trigger value (A) when in level 1. */ +#define PROT_OVER_CURR_POW_DN1 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 2. */ +#define PROT_OVER_CURR_POW_DN2 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 3. */ +#define PROT_OVER_CURR_POW_DN3 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 4. */ +#define PROT_OVER_CURR_POW_OFF (2.0f * PROT_MOTOR_RATED_CURR) +#define PROT_OVER_CURR_RECY_DELTA (0.0035f) /**< Current gap (A) when recovers from protection status. */ +#define PROT_OVER_CURR_LIMIT1_TIME_SEC (30.0f) /**< 20% overload can last maximum time: 30 sec. */ +#define PROT_OVER_CURR_LIMIT2_TIME_SEC (10.0f) /**< 20% overload can last maximum time: 10 sec. */ +#define PROT_OVER_CURR_LIMIT3_TIME_SEC (2.0f) /**< 20% overload can last maximum time: 2 sec. */ + +/**< Over voltage protection */ +#define PROT_OVER_VOLT_BRK_ON1 (26.0f) /**<处于1级时,直流链路电压触发值(V)过高*/ +#define PROT_OVER_VOLT_BRK_ON2 (27.0f) /**< Over dc-link voltage trigger value (V) when in level 2. */ +#define PROT_OVER_VOLT_BRK_ON3 (28.0f) /**< Over dc-link voltage trigger value (V) when in level 3. */ +#define PROT_OVER_VOLT_BRK_ALL (30.0f) /**< Over dc-link voltage trigger value (V) when in level 4. */ +#define PROT_OVER_VOLT_RECY_DELTA (0.5f) /**<从保护状态恢复时的电压间隙(V)*/ +#define PROT_OVER_VOLT_LIMIT1_TIME_SEC (5.0f) /** 1; One-cycle mode: < 0.5 */ +#define POS_SNSR_IPD_INJ_PERIOD (4) + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c new file mode 100644 index 00000000..da4e56f8 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c @@ -0,0 +1,267 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.c + * @author MCU Algorithm Team + * @brief This file contains current protecion api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_curr_prot.h" +#include "mcs_math.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over current protection function. + * @param ocp Over current protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OCP_Init(OCP_Handle *ocp, float ts) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ocp->ts = ts; + OCP_Clear(ocp); + + ocp->protCntLimit = PROT_CNT_LIMIT; + ocp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring four levels of current protection thresholds. */ + ocp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_CURR_POW_DN1; + ocp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_CURR_POW_DN2; + ocp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_CURR_POW_DN3; + ocp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_CURR_POW_OFF; + /* Configure the protection limit time. */ + ocp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_CURR_LIMIT1_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_CURR_LIMIT2_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_CURR_LIMIT3_TIME_SEC; + ocp->recyDelta = PROT_OVER_CURR_RECY_DELTA; +} + +/** + * @brief Over current protection detection. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + /* Calculate current amplitude. */ + ocp->currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + + /* Check if value goes over threshold for continuous cycles. */ + if (ocp->currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0]) { + ocp->protCnt = 0; + return; + } + + if (ocp->protCnt < ocp->protCntLimit) { + ocp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_3] && ocp->protLevel < PROT_LEVEL_4) { + ocp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_2] && ocp->protLevel < PROT_LEVEL_3) { + ocp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_1] && ocp->protLevel < PROT_LEVEL_2) { + ocp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_0] && ocp->protLevel < PROT_LEVEL_1) { + ocp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } +} + +/** + * @brief Over current protection execution. + * @param ocp Over current protection handle. + * @param idqRef DQ-axis current references. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(idqRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + + float id = idqRef->d; + float iq = idqRef->q; + float idqAmp = ocp->currAmp; + /* According to protect level, take corresponding action. */ + switch (ocp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + idqRef->d = 0.0f; + idqRef->q = 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_2]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_1]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_0]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } +} + +/** + * @brief Over current protection recovery. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @retval None. + */ +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overCurrErr) { + return; + } + + /* Calculate current amplitude. */ + float currAmp = ocp->currAmp; + + /* According to protection level, take corresponding recovery action. */ + switch (ocp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_3] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_3; + ocp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_2] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_2; + ocp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_1] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_1; + ocp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + } + } + break; + + /* level 0 */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overCurrErr = 0; + break; + + default: + break; + } +} + +/** + * @brief Over current protection error status clear. + * @param ocp Over current protection handle. + * @retval None. + */ +void OCP_Clear(OCP_Handle *ocp) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* Clear the history value. */ + ocp->protCnt = 0; + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + ocp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h new file mode 100644 index 00000000..e9916fe4 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h @@ -0,0 +1,52 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.h + * @author MCU Algorithm Team + * @brief This file contains current protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_CURR_PROT_H +#define McuMagicTag_MCS_CURR_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_typedef.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float currAmp; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OCP_Handle; + +void OCP_Init(OCP_Handle *ocp, float ts); +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq); +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr); +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus); +void OCP_Clear(OCP_Handle *ocp); + +#endif diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c new file mode 100644 index 00000000..b0541a2e --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c @@ -0,0 +1,495 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.c + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection api declaration. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_dc_volt_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over dc-link voltage protection function. + * @param ovp Over dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OVP_Init(OVP_Handle *ovp, float ts) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ovp->ts = ts; + OVP_Clear(ovp); + ovp->protCntLimit = PROT_CNT_LIMIT; + ovp->recyCntLimit = OVER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of overvoltage protection thresholds. */ + ovp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_VOLT_BRK_ON1; + ovp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_VOLT_BRK_ON2; + ovp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_VOLT_BRK_ON3; + ovp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_VOLT_BRK_ALL; + /* Configure the protection limit time. */ + ovp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_VOLT_LIMIT1_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_VOLT_LIMIT2_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_VOLT_LIMIT3_TIME_SEC; + ovp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Initilization lower dc-link voltage protection function. + * @param lvp Lower dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void LVP_Init(LVP_Handle *lvp, float ts) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + + lvp->ts = ts; + LVP_Clear(lvp); + + lvp->protCntLimit = PROT_CNT_LIMIT; + lvp->recyCntLimit = LOWER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of lower voltage protection thresholds. */ + lvp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_LOWER_VOLT_POW_DN1; + lvp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_LOWER_VOLT_POW_DN2; + lvp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_LOWER_VOLT_POW_DN3; + lvp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_LOWER_VOLT_POW_OFF; + /* Configure the protection limit time. */ + lvp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_LOWER_VOLT_LIMIT1_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_LOWER_VOLT_LIMIT2_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_LOWER_VOLT_LIMIT3_TIME_SEC; + lvp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Over dc-link voltage protection detection. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0]) { + ovp->protCnt = 0; + return; + } + + if (ovp->protCnt < ovp->protCntLimit) { + ovp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_3] && ovp->protLevel < PROT_LEVEL_4) { + ovp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_2] && ovp->protLevel < PROT_LEVEL_3) { + ovp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_1] && ovp->protLevel < PROT_LEVEL_2) { + ovp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_0] && ovp->protLevel < PROT_LEVEL_1) { + ovp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } +} + +/** + * @brief Lower dc-link voltage protection detection. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0]) { + lvp->protCnt = 0; + return; + } + + if (lvp->protCnt < lvp->protCntLimit) { + lvp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_3] && lvp->protLevel < PROT_LEVEL_4) { + lvp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_2] && lvp->protLevel < PROT_LEVEL_3) { + lvp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_1] && lvp->protLevel < PROT_LEVEL_2) { + lvp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_0] && lvp->protLevel < PROT_LEVEL_1) { + lvp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } +} + +/** + * @brief Over dc-link voltage protection execution. + * @param ovp Over dc-link voltage protection handle. + * @param duty Brake loop output duty (0-1). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(duty != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (ovp->protLevel) { + /* level 4: brake loop duty maximum. */ + case PROT_LEVEL_4: + *duty = PROT_OVER_VOLT_BRK_DUTY4; + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + break; + + /* level 3: brake loop duty level 3. */ + case PROT_LEVEL_3: + *duty = PROT_OVER_VOLT_BRK_DUTY2; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_2]) { + *duty = PROT_OVER_VOLT_BRK_DUTY3; + } + break; + + /* level 2: brake loop duty level 2. */ + case PROT_LEVEL_2: + *duty = PROT_OVER_VOLT_BRK_DUTY1; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_1]) { + *duty = PROT_OVER_VOLT_BRK_DUTY2; + } + break; + + /* level 1: brake loop duty level 1. */ + case PROT_LEVEL_1: + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_0]) { + *duty = PROT_OVER_VOLT_BRK_DUTY1; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection execution. + * @param lvp Lower dc-link voltage protection handle. + * @param spdRef Speed Reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (lvp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + *spdRef *= PROT_POW_DN1_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_0]) { + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection recovery. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (ovp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_3] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_3; + ovp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is less than threshold 2, level-2 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_2] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_2; + ovp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is less than threshold 1, level-1 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_1] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_1; + ovp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is less than threshold 0, level-0 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection recovery. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.lowerVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (lvp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the dc-link voltage is greater than threshold 3, level-3 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_3] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_3; + lvp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is greater than threshold 2, level-2 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_2] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_2; + lvp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is greater than threshold 1, level-1 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_1] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_1; + lvp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is greater than threshold 0, level-0 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.lowerVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection error status clear. + * @param ovp Over voltage protection handle. + * @retval None. + */ +void OVP_Clear(OVP_Handle *ovp) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* Clear the history value. */ + ovp->protCnt = 0; + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + ovp->timer = 0.0f; +} + +/** + * @brief Lower dc-link voltage protection error status clear. + * @param lvp Lower voltage protection handle. + * @retval None. + */ +void LVP_Clear(LVP_Handle *lvp) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* Clear the history value. */ + lvp->protCnt = 0; + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + lvp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h new file mode 100644 index 00000000..0435156a --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h @@ -0,0 +1,69 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.h + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_DC_VOLT_PROT_H +#define McuMagicTag_MCS_DC_VOLT_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low voltage level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OVP_Handle; + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from high voltage level to low. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} LVP_Handle; + +void OVP_Init(OVP_Handle *ovp, float ts); +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr); +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Clear(OVP_Handle *ovp); + +void LVP_Init(LVP_Handle *lvp, float ts); +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr); +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Clear(LVP_Handle *lvp); + +#endif diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c new file mode 100644 index 00000000..9dee4d2d --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c @@ -0,0 +1,112 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.c + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_motor_stalling.h" +#include "mcs_prot_user_config.h" +#include "mcs_math.h" +#include "mcs_math_const.h" +#include "mcs_assert.h" + +/** + * @brief Initilization motor stalling protection function. + * @param stall Motor stalling handle. + * @param ts Ctrl period (s). + * @param currLimit The current amplitude that triggers fault. (A). + * @param spdLimit The speed amplitude that triggers fault. (Hz). + * @param timeLimit The threshold time that current amplitude over the limit (s). + * @retval None. + */ +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + MCS_ASSERT_PARAM(currLimit > 0.0f); + MCS_ASSERT_PARAM(spdLimit > 0.0f); + MCS_ASSERT_PARAM(timeLimit > 0.0f); + /* Configuring parameters for stalling detection. */ + stall->ts = ts; + /* Current threshold and speed threshold for stalling fault. */ + stall->currAmpLimit = currLimit; + stall->spdLimit = spdLimit; + stall->timeLimit = timeLimit; + stall->timer = 0.0f; +} + +/** + * @brief Motor stalling detection. + * @param stall Motor stalling handle. + * @param motorErrStatus Motor error status. + * @param spd Speed feedback (Hz). + * @param idq Dq-axis current feedback (A). + * @retval None. + */ +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(Abs(spd) >= 0.0f); + /* Calculate current amplitude. */ + float currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + float spdAbs = Abs(spd); + /* Check if value goes over threshold for continuous cycles. */ + if (currAmp < stall->currAmpLimit || spdAbs > stall->spdLimit) { + stall->timer = 0.0f; + return; + } + /* Time accumulation. */ + if (stall->timer < stall->timeLimit) { + stall->timer += stall->ts; + return; + } + motorErrStatus->Bit.motorStalling = 1; +} + +/** + * @brief Motor stalling protection execution. + * @param motorErrStatus Motor error status. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + if (motorErrStatus->Bit.motorStalling == 0) { + return; + } + + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + return; +} + +/** + * @brief Motor stalling protection error status clear. + * @param stall Motor stalling handle. + * @retval None. + */ +void STP_Clear(STP_Handle *stall) +{ + MCS_ASSERT_PARAM(stall != NULL); + stall->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h new file mode 100644 index 00000000..a1d1e4be --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h @@ -0,0 +1,45 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.h + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_MOTOR_STALLING_PROT_H +#define McuMagicTag_MCS_MOTOR_STALLING_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" +#include "mcs_typedef.h" + +typedef struct { + float currAmpLimit; /**< Feedback current higher than this value triggers fault. (A). */ + float spdLimit; /**< Feedback speed lower than this value triggers fault (Hz). */ + float timeLimit; /**< The threshold time that current and speed feedback over ranges (s). */ + float timer; /**< Timer to get speed and current over range time. */ + float ts; /**< Ctrl period (s). */ +} STP_Handle; + +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit); +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq); +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr); +void STP_Clear(STP_Handle *stall); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c new file mode 100644 index 00000000..184ba4a3 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c @@ -0,0 +1,262 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.c + * @author MCU Algorithm Team + * @brief This file contains over temperature protection api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_temp_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over temperation protection function. + * @param otp Over temperature protection handle. + * @param ts Ctrl period. + * @retval None. + */ +void OTP_Init(OTP_Handle *otp, float ts) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + otp->ts = ts; + otp->protCntLimit = PROT_CNT_LIMIT; + otp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring the temperature protection threshold. */ + otp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_IPM_TEMP_POW_DN1; + otp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_IPM_TEMP_POW_DN2; + otp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_IPM_TEMP_POW_DN3; + otp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_IPM_TEMP_POW_OFF; + /* Configuring the protection limiting time. */ + otp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_TEMP_LIMIT1_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_TEMP_LIMIT2_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_TEMP_LIMIT3_TIME_SEC; + otp->recyDelta = PROT_OVER_IPM_TEMP_RECY_DELTA; + OTP_Clear(otp); +} + +/** + * @brief Over temperatre protection detection. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0]) { + otp->protCnt = 0; + ClearBit(&motorErrStatus->all, protBit); + return; + } + + if (otp->protCnt < otp->protCntLimit) { + otp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_3] && otp->protLevel < PROT_LEVEL_4) { + otp->protLevel = PROT_LEVEL_4; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_2] && otp->protLevel < PROT_LEVEL_3) { + otp->protLevel = PROT_LEVEL_3; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_1] && otp->protLevel < PROT_LEVEL_2) { + otp->protLevel = PROT_LEVEL_2; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_0] && otp->protLevel < PROT_LEVEL_1) { + otp->protLevel = PROT_LEVEL_1; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } +} + +/** + * @brief Over temperature protection execution. + * @param otp Over temperature protection handle. + * @param spdRef Speed reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (otp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + /* Reducte motor speed to level 2 */ + *spdRef *= PROT_POW_DN1_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + case PROT_LEVEL_1: + /* Reducte motor speed to level 0 */ + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_0]) { + /* level 1: derate speed reference. */ + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection recovery. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param temp Temperature (celsius). + * @retval None. + */ +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* If not under error state, just return without any operation. */ + if (otp->protLevel == PROT_LEVEL_0) { + motorErrStatus->all &= (~(1 >> protBit)); + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (otp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the temperature is less than threshold 3, level-3 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_3] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_3; + otp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the temperature is less than threshold 2, level-2 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_2] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_2; + otp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the temperature is less than threshold 1, level-1 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_1] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_1; + otp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the temperature is less than threshold 0, level-0 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + } + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection error status clear. + * @param otp Over temperature protection handle. + * @retval None. + */ +void OTP_Clear(OTP_Handle *otp) +{ + MCS_ASSERT_PARAM(otp != NULL); + /* Clear the history value. */ + otp->protCnt = 0; + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + otp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h new file mode 100644 index 00000000..2b9d99a7 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h @@ -0,0 +1,49 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.h + * @author MCU Algorithm Team + * @brief his file contains over temperature protection api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_TEMP_PROT_H +#define McuMagicTag_MCS_TEMP_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float ts; + float timer; + PROT_Level protLevel; +} OTP_Handle; + +void OTP_Init(OTP_Handle *otp, float ts); +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr); +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Clear(OTP_Handle *otp); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/readme.md b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/readme.md new file mode 100644 index 00000000..98b2a068 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/readme.md @@ -0,0 +1,10 @@ +# pmsm_sensorless_2shunt_foc + +**【功能描述】** ++ 基于ECMCU105H/ECBMCU201MPC单板的单电机双电阻采样Foc应用 + +**【环境要求】** ++ 所有单板电源改制为演示用的12V低压,电机选用Gimbal GBM2804H-100T + +**【IDE配置方法】** ++ chipConfig中的Sample栏目里面选中pmsm sensorless 2shunt foc示例,然后点击生成代码即可 diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c new file mode 100644 index 00000000..9fc8afac --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c @@ -0,0 +1,144 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.c + * @author MCU Algorithm Team + * @brief This file provides carrier interrupt application for motor control. + */ + +#include "mcs_carrier.h" +#include "mcs_math.h" +#include "typedefs.h" +#include "mcs_assert.h" +#include "mcs_user_config.h" +#include "mcs_ctlmode_config.h" + +/** + * @brief Synchronous rotation coordinate system angle. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_SyncCoorAngle(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* Synchronous rotation coordinate system angle. */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + /* Current ramp angle is 0. */ + if (mtrCtrl->startup.stage == STARTUP_STAGE_CURR) { + mtrCtrl->axisAngle = 0; + } else if (mtrCtrl->startup.stage == STARTUP_STAGE_SPD) { /* IF control phase angle self-addition. */ + mtrCtrl->axisAngle = IF_CurrAngleCalc(&mtrCtrl->ifCtrl, mtrCtrl->spdRefHz); + } else if (mtrCtrl->startup.stage == STARTUP_STAGE_SWITCH) { /* Switch Angle */ + mtrCtrl->axisAngle = mtrCtrl->smo.elecAngle; + } + break; + + case FSM_RUN: + mtrCtrl->axisAngle = mtrCtrl->smo.elecAngle; + break; + + default: + mtrCtrl->axisAngle = 0; + break; + } +} + +/** + * @brief PWM waveform setting and sampling point setting for a single resistors and dual resistors. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_PwmAdcSet(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SampleMode sampleMode = mtrCtrl->sampleMode; + /* Set the duty cycle according to the sampling mode. */ + if (sampleMode == DUAL_RESISTORS) { + SVPWM_Exec(&mtrCtrl->sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvw); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvw, &mtrCtrl->dutyUvw); + } else if (sampleMode == SINGLE_RESISTOR) { + R1SVPWM_Exec(&mtrCtrl->r1Sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + /* The ADC sampling point position needs to be set based on the phase shift of a single resistors. */ + mtrCtrl->setADCTriggerTimeCb(mtrCtrl->r1Sv.samplePoint[0] * mtrCtrl->aptMaxcntCmp, \ + mtrCtrl->r1Sv.samplePoint[1] * mtrCtrl->aptMaxcntCmp); + } +} + +/** + * @brief Carrier interrupt function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UvwAxis *currUvw = &mtrCtrl->currUvw; + AlbeAxis *currAlbe = &mtrCtrl->iabFbk; + AlbeAxis *vab = &mtrCtrl->vabRef; + SampleMode sampleMode = mtrCtrl->sampleMode; + /* sample mode verify */ + if (sampleMode > SINGLE_RESISTOR || mtrCtrl->setADCTriggerTimeCb == NULL) { + return; + } + /* param verify */ + if (mtrCtrl->setPwmDutyCb == NULL || mtrCtrl->readCurrUvwCb == NULL) { + return; + } + /* Read the three-phase current value. */ + mtrCtrl->readCurrUvwCb(currUvw); + /* Clark Calc */ + ClarkeCalc(currUvw, currAlbe); + /* Smo observation */ + if (mtrCtrl->obserType == FOC_OBSERVERTYPE_SMO1TH) { + /* Smo observation */ + FOSMO_Exec(&mtrCtrl->smo, currAlbe, vab, mtrCtrl->spdRefHz); + } else if (mtrCtrl->obserType == FOC_OBSERVERTYPE_SMO4TH) { + /* Smo4th observation */ + SMO4TH_Exec(&mtrCtrl->smo4th, currAlbe, vab); + mtrCtrl->smo.spdEst = mtrCtrl->smo4th.spdEst; + mtrCtrl->smo.elecAngle = mtrCtrl->smo4th.elecAngle; + } + /* Synchronization angle */ + MCS_SyncCoorAngle(mtrCtrl); + + /* Park transformation */ + ParkCalc(currAlbe, mtrCtrl->axisAngle, &mtrCtrl->idqFbk); + + /* statemachine */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + case FSM_RUN: + CURRCTRL_Exec(&mtrCtrl->currCtrl, &mtrCtrl->vdqRef, mtrCtrl->smo.spdEst, 0); + InvParkCalc(&mtrCtrl->vdqRef, mtrCtrl->axisAngle, vab); + MCS_PwmAdcSet(mtrCtrl); + break; + + case FSM_CAP_CHARGE: + case FSM_CLEAR: + case FSM_IDLE: + mtrCtrl->smo4th.spdEst = 0.0f; + break; + + default: + vab->alpha = 0.0f; + vab->beta = 0.0f; + MCS_PwmAdcSet(mtrCtrl); + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c new file mode 100644 index 00000000..79bc3949 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c @@ -0,0 +1,950 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.c + * @author MCU Algorithm Team + * @brief This file provides motor application. + * @details Single FOC application based on the ECMCU105H/ECBMCU201MPC board + * 1) Motor model is Gimbal GBM2804H-100T. + * 2) Select the pmsm sensorless 2shunt foc example in the sample column + of chipConfig and click Generate Code. + * 3) It's power supply must be changed to 12V. + */ +#include "main.h" +#include "mcs_user_config.h" +#include "mcs_math.h" +#include "hmi_module.h" +#include "mcs_ctlmode_config.h" +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_math_const.h" +#include "mcs_motor_process.h" +#include "mcs_chip_config.h" +#include + +/*------------------------------- Macro Definition -----------------------------------------------*/ +#define US_PER_MS 1000 +#define ANGLE_RANGE_ABS 65536 +#define ANGLE_360_F 65536.0f /* 0 - 65536 indicates 0 to 360. */ +#define APT_FULL_DUTY 1.0f +#define TEMP_3 3.0f +#define TEMP_15 15.0f +#define TEMP_30 30.0f +#define TEMP_45 45.0f +#define TEMP_60 60.0f +#define TEMP_RES_15 78.327f +#define TEMP_RES_30 36.776f +#define TEMP_RES_45 18.301f +#define TEMP_RES_60 9.607f +#define CNT_10 10 +#define CNT_5000 5000 +#define LEVEL_4 4 +#define MOTOR_START_DELAY 2 +#define ADC_READINIT_DELAY 1 +#define ADC_READINIT_TIMES 20 +#define ADC_TRIMVALUE_MIN 1800.0f +#define ADC_TRIMVALUE_MAX 2200.0f +/*------------------------------- Param Definition -----------------------------------------------*/ +/* Motor parameters. */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift */ +static MOTOR_Param g_motorParam = MOTORPARAM_DEFAULTS; +static APT_RegStruct* g_apt[PHASE_MAX_NUM] = {APT_U, APT_V, APT_W}; +/* Motor control handle */ +static MTRCTRL_Handle g_mc = {0}; + +/* Motor speed loop PI param. */ +static void SPDCTRL_InitWrapper(SPDCTRL_Handle *spdHandle, float ts) +{ + /* Speed loop param assignment. */ + PI_Param spdPi = { + .kp = SPD_KP, + .ki = SPD_KI, + .lowerLim = SPD_LOWERLIM, + .upperLim = SPD_UPPERLIM, + }; + /* Speed loop param init. */ + SPDCTRL_Init(spdHandle, &g_motorParam, spdPi, ts); +} + +/* Motor current Loop PI param. */ +static void CURRCTRL_InitWrapper(CURRCTRL_Handle *currHandle, DqAxis *idqRef, DqAxis *idqFbk, float ts) +{ + /* Axis-D current loop param assignment. */ + PI_Param dCurrPi = { + .kp = CURRDAXIS_KP, + .ki = CURRDAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Axis-Q current loop param assignment. */ + PI_Param qCurrPi = { + .kp = CURRQAXIS_KP, + .ki = CURRQAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Current loop param init. */ + CURRCTRL_Init(currHandle, &g_motorParam, idqRef, idqFbk, dCurrPi, qCurrPi, ts); +} + +/* First order smo param. */ +static void FOSMO_InitWrapper(FOSMO_Handle *fosmo, float ts) +{ + /* Smo param assignment. */ + FOSMO_Param fosmoParam = { + .gain = FOSMO_GAIN, + .lambda = FOSMO_LAMBDA, + .fcEmf = FOSMO_EMF_CUTOFF_FREQ, + .fcLpf = SPEED_FILTER_CUTOFF_FREQUENCY, + .pllBdw = FOSMO_PLL_BDW, + }; + /* Init smo param. */ + FOSMO_Init(fosmo, fosmoParam, &g_motorParam, ts); +} + +/* Smo4th param. */ +static void SMO4TH_InitWrapper(SMO4TH_Handle *smo4TH) +{ + /* Smo4th param assignment. */ + SMO4TH_Param smo4thParam = { + .kd = SMO4TH_KD, + .kq = SMO4TH_KQ, + .pllBdw = SMO4TH_PLL_BDW, + .fcLpf = SMO4TH_SPD_FILTER_CUTOFF_FREQ, + }; + /* Init smo param. */ + SMO4TH_Init(smo4TH, smo4thParam, &g_motorParam, CTRL_CURR_PERIOD); +} + +/*------------------------------- Function Definition -----------------------------------------------*/ +/** + * @brief Initialzer of system tick. + * @param mtrCtrl Motor control struct handle. + * @retval None. + */ +static void TimerTickInit(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysTickCnt = 0; + mtrCtrl->msTickNum = US_PER_MS / SYSTICK_PERIOD_US; + mtrCtrl->capChargeTickNum = (INV_CAP_CHARGE_MS * US_PER_MS / SYSTICK_PERIOD_US); +} + +/** + * @brief Init motor control task. + * @retval None. + */ +static void TSK_Init(void) +{ + g_mc.motorStateFlag = 0; + g_mc.uartHeartDetCnt = 0; + g_mc.uartTimeStamp = 0; + g_mc.stateMachine = FSM_IDLE; + g_mc.currCtrlPeriod = CTRL_CURR_PERIOD; /* Init current controller */ + g_mc.aptMaxcntCmp = g_apt0.waveform.timerPeriod; + g_mc.sampleMode = DUAL_RESISTORS; + g_mc.obserType = FOC_OBSERVERTYPE_SMO4TH; /* Init foc observe mode */ + g_mc.controlMode = FOC_CONTROLMODE_SPEED; /* Init motor control mode */ + g_mc.adcCurrCofe = ADC_CURR_COFFI; + g_mc.spdAdjustMode = CUST_SPEED_ADJUST; + g_mc.uartConnectFlag = DISCONNECT; + g_mc.spdCmdHz = USER_MIN_SPD_HZ; /* Motor initialization speed */ + + g_mc.adc0Compensate = ADC0COMPENSATE; /* Phase-u current init adc shift trim value */ + g_mc.adc1Compensate = ADC1COMPENSATE; /* Phase-w current init adc shift trim value */ + + IF_Init(&g_mc.ifCtrl, CTRL_IF_CURR_AMP_A, USER_CURR_SLOPE, CTRL_SYSTICK_PERIOD, CTRL_CURR_PERIOD); + RMG_Init(&g_mc.spdRmg, CTRL_SYSTICK_PERIOD, USER_SPD_SLOPE); /* Init speed slope */ + MtrParamInit(&g_mc.mtrParam, g_motorParam); + + TimerTickInit(&g_mc); + if (g_mc.sampleMode == DUAL_RESISTORS) { + SVPWM_Init(&g_mc.sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3); /* Dual resistors SVPWM init. */ + } else if (g_mc.sampleMode == SINGLE_RESISTOR) { + /* Single resistor SVPWM init. */ + R1SVPWM_Init(&g_mc.r1Sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3, SAMPLE_POINT_SHIFT, SAMPLE_WINDOW_DUTY); + } + + SPDCTRL_InitWrapper(&g_mc.spdCtrl, CTRL_SYSTICK_PERIOD); + CURRCTRL_InitWrapper(&g_mc.currCtrl, &g_mc.idqRef, &g_mc.idqFbk, CTRL_CURR_PERIOD); + FOSMO_InitWrapper(&g_mc.smo, CTRL_CURR_PERIOD); + SMO4TH_InitWrapper(&g_mc.smo4th); + + STARTUP_Init(&g_mc.startup, USER_SWITCH_SPDBEGIN_HZ, USER_SWITCH_SPDBEGIN_HZ + TEMP_3); + + MotorProt_Init(&g_mc.prot); /* Init protect state comond */ + OCP_Init(&g_mc.prot.ocp, CTRL_CURR_PERIOD); + OVP_Init(&g_mc.prot.ovp, CTRL_SYSTICK_PERIOD); + LVP_Init(&g_mc.prot.lvp, CTRL_SYSTICK_PERIOD); + OTP_Init(&g_mc.prot.otp, CTRL_SYSTICK_PERIOD); + STP_Init(&g_mc.prot.stall, CTRL_SYSTICK_PERIOD, PROT_STALLING_CURR_AMP_LIMIT, + PROT_STALLING_SPD_LIMIT, PROT_STALLING_TIME_LIMIT); +} + +/** + * @brief Clear historical values of all controller before start-up. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ClearBeforeStartup(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* The initial angle is 0. */ + mtrCtrl->axisAngle = 0; + + mtrCtrl->spdRefHz = 0.0f; + /* The initial dq-axis reference current is 0. */ + mtrCtrl->idqRef.d = 0.0f; + mtrCtrl->idqRef.q = 0.0f; + + mtrCtrl->vdqRef.d = 0.0f; + mtrCtrl->vdqRef.q = 0.0f; + /* Clear Duty Cycle Value. The initial duty cycle is 0.5. */ + mtrCtrl->dutyUvwLeft.u = 0.5f; + mtrCtrl->dutyUvwLeft.v = 0.5f; + mtrCtrl->dutyUvwLeft.w = 0.5f; + mtrCtrl->dutyUvwRight.u = 0.5f; + mtrCtrl->dutyUvwRight.v = 0.5f; + mtrCtrl->dutyUvwRight.w = 0.5f; + + mtrCtrl->prot.motorErrStatus.all = 0x00; + + RMG_Clear(&mtrCtrl->spdRmg); /* Clear the history value of speed slope control */ + CURRCTRL_Clear(&mtrCtrl->currCtrl); + IF_Clear(&mtrCtrl->ifCtrl); + SPDCTRL_Clear(&mtrCtrl->spdCtrl); + FOSMO_Clear(&mtrCtrl->smo); + SMO4TH_Clear(&mtrCtrl->smo4th); + STARTUP_Clear(&mtrCtrl->startup); + R1SVPWM_Clear(&mtrCtrl->r1Sv); + + OTP_Clear(&mtrCtrl->prot.otp); + OCP_Clear(&mtrCtrl->prot.ocp); + OVP_Clear(&mtrCtrl->prot.ovp); + LVP_Clear(&mtrCtrl->prot.lvp); +} + +/** + * @brief To set the comparison value of the IGBT single-resistance ADC sampling trigger position. + * @param aptx The APT register struct handle. + * @param cntCmpA A Count compare reference of time-base counter. + * @param cntCmpB B Count compare reference of time-base counter. + * @param maxCntCmp Maximum Comparison Value + * @retval None. + */ +static void MCS_SetAdcCompareR1(APT_RegStruct *aptx, unsigned short cntCmpA, + unsigned short cntCmpB, unsigned short maxCntCmp) +{ + unsigned short tmp; + /* Sets the A Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpA), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_A, tmp); + /* Sets the B Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpB), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_B, tmp); +} + +/** + * @brief Open the three-phase lower pipe. + * @param aptAddr Three-phase APT address pointer. + * @param maxDutyCnt Max duty count. + * @retval None. + */ +static void AptTurnOnLowSidePwm(APT_RegStruct **aptAddr, unsigned short maxDutyCnt) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(maxDutyCnt != 0); + unsigned short dutyCnt; + dutyCnt = (unsigned short)(maxDutyCnt * APT_FULL_DUTY); + /* Open the three-phase lower pipe */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_C, dutyCnt); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_D, dutyCnt); + } +} + +/** + * @brief Enable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputEnable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Enable three-phase pwm output */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_UNSET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_UNSET; + } +} + +/** + * @brief Disable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputDisable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Disable three-phase pwm output. */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_SET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_SET; + DCL_APT_ForcePWMOutputLow(aptx); + } +} + +/** + * @brief Smo IF angle difference calculation. + * @param smoElecAngle Smo electrical angle. + * @param ifCtrlAngle IF control angle. + * @retval signed short angle difference. + */ +static float SmoIfAngleDiffCalc(float smoElecAngle, float ifCtrlAngle) +{ + float diff = AngleSub(smoElecAngle, ifCtrlAngle); + /* Smo IF angle difference calculation */ + return diff; +} + +/** + * @brief Construct a new mcs startupswitch object. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_StartupSwitch(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + STARTUP_Handle *startup = &mtrCtrl->startup; + DqAxis *idqRef = &mtrCtrl->idqRef; + float iftargetAmp = mtrCtrl->ifCtrl.targetAmp; + float spdRefHz = mtrCtrl->spdRefHz; + + switch (startup->stage) { + case STARTUP_STAGE_CURR: + if (mtrCtrl->ifCtrl.curAmp >= iftargetAmp) { + /* Stage change */ + idqRef->q = iftargetAmp; + startup->stage = STARTUP_STAGE_SPD; + } else { + /* current amplitude increase */ + idqRef->q = IF_CurrAmpCalc(&mtrCtrl->ifCtrl); + spdRefHz = 0.0f; + } + break; + case STARTUP_STAGE_SPD: + /* current frequency increase */ + if (Abs(spdRefHz) >= startup->spdBegin) { + /* Stage change */ + startup->stage = STARTUP_STAGE_SWITCH; + TrigVal localTrigVal; + TrigCalc(&localTrigVal, SmoIfAngleDiffCalc(mtrCtrl->smo.elecAngle, mtrCtrl->ifCtrl.angle)); + idqRef->d = 0.0f; + mtrCtrl->spdCtrl.spdPi.integral = iftargetAmp * localTrigVal.cos; + } else { + /* Speed rmg */ + spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + } + break; + + case STARTUP_STAGE_SWITCH: + /* Switch from IF to SMO */ + spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + idqRef->q = SPDCTRL_Exec(&mtrCtrl->spdCtrl, mtrCtrl->spdRefHz, mtrCtrl->smo.spdEst); + /* Transitional stage, if current reference speed > critical speed, change to next stage */ + if (spdRefHz >= startup->spdBegin + TEMP_3) { + /* Stage change */ + mtrCtrl->stateMachine = FSM_RUN; + } + break; + + default: + break; + } + mtrCtrl->spdRefHz = spdRefHz; +} + +/** + * @brief Pre-processing of motor status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void MotorStatePerProc(SysStatusReg *statusReg, volatile FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* Get system status */ + if (SysIsError(statusReg)) { + *stateMachine = FSM_FAULT; + } + if (SysGetCmdStop(statusReg)) { + SysCmdStopClr(statusReg); + *stateMachine = FSM_STOP; + } +} + +/** + * @brief Check over current status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckOverCurrentState(SysStatusReg *statusReg, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check systerm error status */ + if (SysIsError(statusReg) == false) { + *stateMachine = FSM_IDLE; + } +} + +/** + * @brief Check bootstrap capacitor charge time. + * @param mtrCtrl The motor control handle. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckBootstrpCapChargeTime(MTRCTRL_Handle *mtrCtrl, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + mtrCtrl->sysTickCnt++; + /* check bootstrap capacitor charge time */ + if (mtrCtrl->sysTickCnt == mtrCtrl->capChargeTickNum) { + *stateMachine = FSM_CLEAR; + } +} + +/** + * @brief Check systerm cmd start signal. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckSysCmdStart(MTRCTRL_Handle *mtrCtrl, + APT_RegStruct **aptAddr, + SysStatusReg *statusReg, + FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check start cmd */ + if (SysGetCmdStart(statusReg)) { + SysRunningSet(statusReg); + SysCmdStartClr(statusReg); + mtrCtrl->sysTickCnt = 0; + *stateMachine = FSM_CAP_CHARGE; + /* Preparation for charging the bootstrap capacitor. */ + AptTurnOnLowSidePwm(aptAddr, mtrCtrl->aptMaxcntCmp); + /* Out put pwm */ + MotorPwmOutputEnable(aptAddr); + } +} + +/** + * @brief System timer tick task. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void TSK_SystickIsr(MTRCTRL_Handle *mtrCtrl, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + SysStatusReg *statusReg = &mtrCtrl->statusReg; + FsmState *stateMachine = &mtrCtrl->stateMachine; + mtrCtrl->msTickCnt++; + /* Pre-processing of motor status. */ + MotorStatePerProc(statusReg, stateMachine); + /* statemachine */ + switch (*stateMachine) { + case FSM_IDLE: + /* Set smo estimate speed before motor start-up */ + g_mc.smo.spdEst = 0.0f; + CheckSysCmdStart(mtrCtrl, aptAddr, statusReg, stateMachine); + break; + case FSM_CAP_CHARGE: + /* Bootstrap Capacitor Charging Timing */ + CheckBootstrpCapChargeTime(mtrCtrl, stateMachine); + break; + /* Clear parameter before start */ + case FSM_CLEAR: + ClearBeforeStartup(mtrCtrl); + *stateMachine = FSM_STARTUP; + break; + case FSM_STARTUP: + MCS_StartupSwitch(mtrCtrl); + break; + case FSM_RUN: + /* Speed ramp control */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + /* Speed loop control */ + mtrCtrl->idqRef.q = SPDCTRL_Exec(&mtrCtrl->spdCtrl, mtrCtrl->spdRefHz, mtrCtrl->smo.spdEst); + break; + case FSM_STOP: + mtrCtrl->spdRefHz = 0.0f; + MotorPwmOutputDisable(aptAddr); + SysRunningClr(statusReg); + *stateMachine = FSM_IDLE; + break; + case FSM_FAULT: /* Overcurrent state */ + CheckOverCurrentState(statusReg, stateMachine); + break; + default: + break; + } +} + +/** + * @brief Read the ADC initialize bias trim value. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void TrimInitAdcShiftValue(MTRCTRL_Handle *mtrCtrl) +{ + float adc0SampleTemp = 0.0f; /* Current bias value for temp store */ + float adc1SampleTemp = 0.0f; + float adc0TempSum = 0.0f; + float adc1TempSum = 0.0f; /* Current bias sum value for 20 times */ + float adcSampleTimes = 0.0f; /* ADC sample times */ + for (int i = 0; i < ADC_READINIT_TIMES; i++) { + adc0SampleTemp = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + adc1SampleTemp = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + BASE_FUNC_DELAY_US(200); /* 200 is delay count, delay 200us triger adc sampling */ + if (adc0SampleTemp > 1000.0f && adc1SampleTemp > 1000.0f) { + adcSampleTimes++; + adc0TempSum += adc0SampleTemp; + adc1TempSum += adc1SampleTemp; + } + } + if (adcSampleTimes < 1.0f) { + adcSampleTimes = 1.0f; /* Prevent divide-by-zero errors */ + } + adc0SampleTemp = adc0TempSum / adcSampleTimes; + adc1SampleTemp = adc1TempSum / adcSampleTimes; + /* Force convert to float */ + mtrCtrl->adc0Compensate = (float) adc0SampleTemp; + mtrCtrl->adc1Compensate = (float) adc1SampleTemp; + /* The normal value scope: 1800 < adc0Compensate < 2200 */ + if(g_mc.adc0Compensate < ADC_TRIMVALUE_MIN || g_mc.adc0Compensate > ADC_TRIMVALUE_MAX \ + || g_mc.adc1Compensate < ADC_TRIMVALUE_MIN || g_mc.adc1Compensate > ADC_TRIMVALUE_MAX) { + DBG_PRINTF("ADC trim value error,please reset!"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + } + adcSampleTimes = 0; + adc0TempSum = 0; + adc1TempSum = 0; +} + +/** + * @brief Read the ADC current sampling value. + * @param CurrUvw Three-phase current. + * @retval None. + */ +static void ReadCurrUvw(UvwAxis *CurrUvw) +{ + MCS_ASSERT_PARAM(CurrUvw != NULL); + float adc0 = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + float adc1 = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + /* Convert adc sample value to current value */ + CurrUvw->u = -(adc0 - g_mc.adc0Compensate) * g_mc.adcCurrCofe; + CurrUvw->w = -(adc1 - g_mc.adc1Compensate) * g_mc.adcCurrCofe; + CurrUvw->v = -CurrUvw->u - CurrUvw->w; +} + +/** + * @brief Setting the APT Output Duty Cycle. + * @param aptx APT register base address. + * @param leftDuty Left duty cycle. + * @param rightDuty Right duty cycle. + * @retval None. + */ +static void SetPwmDuty(APT_Handle *aptx, float leftDuty, float rightDuty) +{ + MCS_ASSERT_PARAM(aptx != NULL); + MCS_ASSERT_PARAM(leftDuty > 0); + MCS_ASSERT_PARAM(rightDuty > 0); + unsigned short maxPeriodCnt = aptx->waveform.timerPeriod; + unsigned short cntCmpLeftEdge = (unsigned short)(leftDuty * maxPeriodCnt); + unsigned short cntCmpRightEdge = (unsigned short)(rightDuty * maxPeriodCnt); + /* avoid overflowing */ + cntCmpLeftEdge = (cntCmpLeftEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpLeftEdge; + cntCmpRightEdge = (cntCmpRightEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpRightEdge; + HAL_APT_SetPWMDuty(aptx, cntCmpLeftEdge, cntCmpRightEdge); +} + +/** + * @brief Duty Cycle Setting. + * @param dutyUvwLeft Three-phase left duty cycle. + * @param dutyUvwRight Three-phase right duty cycle. + * @retval None. + */ +static void SetPwmDutyCp(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight) +{ + MCS_ASSERT_PARAM(dutyUvwLeft != NULL); + MCS_ASSERT_PARAM(dutyUvwRight != NULL); + /* Setting the Three-Phase Duty Cycle */ + SetPwmDuty(&g_apt0, dutyUvwLeft->u, dutyUvwRight->u); + SetPwmDuty(&g_apt1, dutyUvwLeft->v, dutyUvwRight->v); + SetPwmDuty(&g_apt2, dutyUvwLeft->w, dutyUvwRight->w); +} + +/** + * @brief To set the ADC sampling trigger comparison value. + * @param cntCmpSOCA Soca Compare Count Value. + * @param cntCmpSOCB Socb Compare Count Value. + * @retval None. + */ +static void SetADCTriggerTime(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB) +{ + MCS_SetAdcCompareR1(g_apt[PHASE_U], cntCmpSOCA, cntCmpSOCB, g_mc.aptMaxcntCmp); +} + +/** + * @brief Temprature table, the temprature detect range is 15 ~ 60 degree. + * @param tempResisValue Temperature sensor resistance. + * @retval None. + */ +static float TempTable(float tempResisValue) +{ + float boardTemp = 0.0f; + /* Temperatures between 15 and 30. */ + if (tempResisValue > TEMP_RES_30 && tempResisValue <= TEMP_RES_15) { + boardTemp = TEMP_15 + (TEMP_30 - TEMP_15) * (TEMP_RES_15 - tempResisValue) / (TEMP_RES_15 - TEMP_RES_30); + } else if (tempResisValue > TEMP_RES_45 && tempResisValue <= TEMP_RES_30) { /* Temperature between 30 and 45. */ + boardTemp = TEMP_30 + (TEMP_45 - TEMP_30) * (TEMP_RES_30 - tempResisValue) / (TEMP_RES_30 - TEMP_RES_45); + } else if (tempResisValue > TEMP_RES_60 && tempResisValue <= TEMP_RES_45) { /* Temperature between 45 and 50. */ + boardTemp = TEMP_45 + (TEMP_60 - TEMP_45) * (TEMP_RES_45 - tempResisValue) / (TEMP_RES_45 - TEMP_RES_60); + } else if (tempResisValue <= TEMP_RES_60) { + boardTemp = TEMP_60; /* If temperature is over 60, set temperature as 60. */ + } else if (tempResisValue >= TEMP_RES_15) { + boardTemp = TEMP_15; /* If temperature is lower 15, set temperature as 15. */ + } + return boardTemp; +} + +/** + * @brief Read power board temperature and udc. + * @retval None. + */ +static void ReadBoardTempAndUdc(void) +{ + HAL_ADC_SoftTrigSample(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + HAL_ADC_SoftTrigSample(&ADCUDC_HANDLE, ADCUDCSOCNUM); + BASE_FUNC_DELAY_US(CNT_10); /* Delay 10 us. */ + /* Force convert to float type. */ + float resisAdcValue = (float)HAL_ADC_GetConvResult(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + /* 10 / (x + 10) * 3.3 = resisAdcValue / 4096 * 3.3, x is resisValue, 10kohm is resistor divider value. */ + float resisValue = (4096.0f * 10.0f - 10.0f * resisAdcValue) / resisAdcValue; + g_mc.powerBoardTemp = TempTable(resisValue); + g_mc.udc = ((float)HAL_ADC_GetConvResult(&ADCUDC_HANDLE, ADCUDCSOCNUM)) * ADC_UDC_COFFI; +} + +/** + * @brief Execut abnormal feedback speed protect motion. + * @retval None. + */ +static void SpdFbkErrorProt_Exec(void) +{ + if (g_mc.prot.motorErrStatus.Bit.motorStalling == 0 && + g_mc.prot.motorErrStatus.Bit.overVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.lowerVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.overIpmTempErr == 0 && + g_mc.prot.motorErrStatus.Bit.overCurrErr == 0) { + g_mc.prot.motorErrStatus.Bit.revRotErr = 1; + /* If revRotErr, execute protect motion. */ + ProtSpo_Exec(g_apt); + } +} + +/** + * @brief Execut nan data protect motion. + * @retval None. + */ +static void NanDataDetect(void) +{ + static short errorSpdStatus = 0; + /* Detect the nan observer speed or current value. */ + if (isnan(g_mc.smo.spdEst) || isnan(g_mc.idqRef.q)) { + errorSpdStatus++; + } else { + errorSpdStatus = 0; + } + /* If the data is nan & continuous counting value is over 500 times, execute protect motion. + the detect time is 500 * 500us = 250ms. */ + if (errorSpdStatus >= 500) { + errorSpdStatus = 0; + SpdFbkErrorProt_Exec(); + } +} + +/** + * @brief Check abnormal feedback speed. + * @retval None. + */ +static void CheckSpdFbkStatus(void) +{ + static short errorCurrStatus = 0; + static short errorDeltaSpdStatus = 0; + NanDataDetect(); + if (g_mc.stateMachine == FSM_RUN) { + /* Detect the abnormal idq feedback current. */ + if (Abs(g_mc.idqRef.q - g_mc.idqFbk.q) >= CTRL_IF_CURR_AMP_A) { + errorCurrStatus++; + } else { + errorCurrStatus = 0; + } + /* Detect the abnormal feedback speed, the normal speed is > 0, if smo.spdEst < -10 && + delta speed error > USER_MIN_SPD_HZ + 10.0f at FSM_RUN stage, set the motor motion as error */ + if (g_mc.smo.spdEst < -10.0f && (g_mc.spdRefHz - g_mc.smo.spdEst > USER_MIN_SPD_HZ + 10.0f)) { + errorDeltaSpdStatus++; + } + } + /* Execute protect motion if count over 500 times, this error status caused by abnormal speed + or cabnormal urrent feedback, the detect time is 500 * 500us = 250ms. */ + if (errorCurrStatus >= 500) { + errorCurrStatus = 0; + SpdFbkErrorProt_Exec(); + } + /* This error statu caused by motor stalling, the detect time is 2 * 500us = 1ms. */ + if (errorDeltaSpdStatus >= 2) { + errorDeltaSpdStatus = 0; + g_mc.prot.motorErrStatus.Bit.motorStalling = 1; + } +} + +/** + * @brief Check Potentiometer Value callback function. + * @param param The TIMER_Handle. + * @retval None. + */ +void CheckPotentiometerValueCallback(void *param) +{ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + static float potentiomitorAdcValue = 0.0f; + static float spdCmdHz = 0; + static float spdCmdHzLast = USER_MIN_SPD_HZ; /* 35.0 is spdCmdHzLast init value */ + HAL_ADC_SoftTrigSample(&ADCPTT_HANDLE, ADCPTTSOCNUM); + BASE_FUNC_DELAY_US(10); /* Delay 10 us. */ + potentiomitorAdcValue = (float)HAL_ADC_GetConvResult(&ADCPTT_HANDLE, ADCPTTSOCNUM); + /* 4045.0 is adc sample max value of potentiomitor, convert max spd to 180.25Hz */ + spdCmdHz = potentiomitorAdcValue / 4045.0f * USER_MAX_SPD_HZ; + if (Abs(spdCmdHzLast - spdCmdHz) < 1.0f) { /* Ignore changes less than 1. */ + return; + } + spdCmdHzLast = spdCmdHz; + if (spdCmdHz < USER_MIN_SPD_HZ) { /* 35.0 is spdCmdHz lower limit */ + spdCmdHz = USER_MIN_SPD_HZ; /* 35.0 is spdCmdHz lower limit */ + } + if (spdCmdHz > g_mc.mtrParam.maxElecSpd) { /* spdCmdHz upper limit */ + spdCmdHz = g_mc.mtrParam.maxElecSpd; /* spdCmdHz upper limit */ + } + if (g_mc.spdAdjustMode == CUST_SPEED_ADJUST) { + g_mc.spdCmdHz = spdCmdHz; + } +} + +/** + * @brief System timer ISR for Motor Statemachine CallBack function. + * @param param The systick timer handle. + * @retval None. + */ +void MotorStatemachineCallBack(void *param) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + /* Read power board temprature and voltage. */ + ReadBoardTempAndUdc(); + /* Motor speed loop state machine. */ + TSK_SystickIsr(&g_mc, g_apt); + + /* Motor error speed feedback check. */ + CheckSpdFbkStatus(); + /* Motor stalling detect. */ + STP_Det_ByCurrSpd(&g_mc.prot.stall, &g_mc.prot.motorErrStatus, g_mc.smo.spdEst, g_mc.idqFbk); + STP_Exec(&g_mc.prot.motorErrStatus, g_apt); + + /* Motor over voltage detect. */ + OVP_Det(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + OVP_Exec(&g_mc.prot.ovp, &g_mc.spdRefHz, g_apt); + OVP_Recy(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* Motor lower voltage detect. */ + LVP_Det(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + LVP_Exec(&g_mc.prot.lvp, &g_mc.spdRefHz, g_apt); + LVP_Recy(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* Power board over temperature detect. */ + OTP_Det(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + OTP_Exec(&g_mc.prot.otp, &g_mc.spdRefHz, g_apt); + OTP_Recy(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + + /* If protect level == 4, set motor state as stop. */ + if (g_mc.prot.ovp.protLevel == LEVEL_4 || g_mc.prot.lvp.protLevel == LEVEL_4 \ + || g_mc.prot.otp.protLevel == LEVEL_4) { + SysCmdStopSet(&g_mc.statusReg); + } +} + +/** + * @brief The carrier ISR wrapper function. + * @param aptHandle The APT handle. + * @retval None. + */ +void MotorCarrierProcessCallback(void *aptHandle) +{ + MCS_ASSERT_PARAM(aptHandle != NULL); + BASE_FUNC_UNUSED(aptHandle); + /* the carrierprocess of motor */ + MCS_CarrierProcess(&g_mc); + /* Over current protect */ + if (g_mc.stateMachine == FSM_RUN || g_mc.stateMachine == FSM_STARTUP) { + OCP_Det(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus, g_mc.idqFbk); + OCP_Exec(&g_mc.prot.ocp, &g_mc.idqFbk, g_apt); /* Execute over current protect motion */ + if (g_mc.prot.ocp.protLevel < LEVEL_4) { + OCP_Recy(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus); + } + } +} + +/** + * @brief Event interrupt callback function of APT module. + * @param para APT module handle. + * @retval None. + */ +void MotorSysErrCallback(void *para) +{ + MCS_ASSERT_PARAM(para != NULL); + APT_Handle *handle = (APT_Handle *)para; + /* The IPM overcurrent triggers and disables the three-phase PWM output. */ + MotorPwmOutputDisable(g_apt); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_U], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_V], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_W], APT_OC_COMBINE_EVENT_A1); + /* Status setting error */ + SysErrorSet(&g_mc.statusReg); + DBG_PRINTF("APT error! \r\n"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + BASE_FUNC_UNUSED(handle); +} + +/** + * @brief Init motor controller's data structure. + * @retval None. + */ +static void InitSoftware(void) +{ + /* Initializing motor control param */ + TSK_Init(); + /* Read phase-uvw current */ + g_mc.readCurrUvwCb = ReadCurrUvw; + g_mc.setPwmDutyCb = SetPwmDutyCp; + g_mc.setADCTriggerTimeCb = SetADCTriggerTime; +} + +/** + * @brief Config the KEY func. + * @param handle The GPIO handle. + * @retval None. + */ +static KEY_State Key_StateRead(GPIO_Handle *handle) +{ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + BASE_FUNC_DELAY_MS(30); /* delay 30ms for deshake */ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + while (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + } + return KEY_DOWN; + } + } + return KEY_UP; +} + +/** + * @brief Control motor start and stop state by key func. + * @param param The GPIO handle. + * @retval None. + */ +void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + if (Key_StateRead(handle) == KEY_DOWN) { + if (g_mc.motorStateFlag == 0) { /* start motor */ + g_mc.motorStateFlag = 1; + SysCmdStartSet(&g_mc.statusReg); + } else if (g_mc.motorStateFlag == 1) { /* stop motor */ + g_mc.motorStateFlag = 0; + SysCmdStopSet(&g_mc.statusReg); + } + } +} + +/** + * @brief User application main entry function. + * @retval BSP_OK. + */ +int MotorMainProcess(void) +{ + unsigned int tickNum1Ms = 2; /* 1ms tick */ + static unsigned int tickCnt1Ms = 0; + unsigned int tickNum500Ms = 1000; /* 500ms tick */ + static unsigned int tickCnt500Ms = 0; + SystemInit(); + HMI_Init(); /* Init uart interrupt */ + HAL_TIMER_Start(&g_timer0); + HAL_TIMER_Start(&g_timer1); + + /* Disable PWM output before startup. */ + MotorPwmOutputDisable(g_apt); + /* Software initialization. */ + InitSoftware(); + /* Start the PWM clock. */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + /* System Timer clock. */ + BASE_FUNC_DELAY_MS(ADC_READINIT_DELAY); + TrimInitAdcShiftValue(&g_mc); + BASE_FUNC_DELAY_MS(MOTOR_START_DELAY); + while (1) { + /* Cycling send data to host */ + HMI_Process_Tx(&g_mc); + if (g_mc.msTickCnt - tickCnt1Ms >= tickNum1Ms) { + tickCnt1Ms = g_mc.msTickCnt; + /* User Code 1ms Event */ + HMI_Process_Rx(&g_mc); + /* User Code 1ms Event */ + } + + if (g_mc.msTickCnt - tickCnt500Ms >= tickNum500Ms) { + if (SysIsError(&g_mc.statusReg) != true) { + /* LED toggle in normal status. */ + HAL_GPIO_TogglePin(&LED1_HANDLE, LED1_PIN); + } + tickCnt500Ms = g_mc.msTickCnt; + } + } + return 0; +} diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c new file mode 100644 index 00000000..7c4f7525 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c @@ -0,0 +1,718 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of cust process interface. + */ + +#include "cust_process.h" +#include "mcs_ctlmode_config.h" +#include "mcs_math_const.h" +#include "mcs_user_config.h" +#include "mcs_assert.h" +#include "main.h" +#include "uart_module.h" +#include "mcs_mtr_param.h" +/* Macro definitions --------------------------------------------------------------------------- */ +/* Constant value. */ +#define CONST_VALUE_60 60.0f /* Constant value 60. */ +#define CONST_VALUE_DIV_1000 0.001f /* Constant value 1/1000. */ + +/* Data array index. */ +#define DATA_SEGMENT_ONE 0 /* First element of the data segment */ +#define DATA_SEGMENT_TWO 1 /* Second element of the data segment */ +#define DATA_SEGMENT_THREE 2 /* Third element of the data segment */ +#define DATA_SEGMENT_FOUR 3 /* Fourth element of the data segment */ +#define CUSTACKCODELEN 10 /* Ack code length */ + +/* Command code. */ +#define SET_PID_KP 0x01 /* Set Pid Kp Command Params */ +#define SET_PID_KI 0x02 /* Set Pid Ki Command Params */ +#define SET_PID_LIMIT 0x03 /* Set Pid limit Command Params */ + +#define SET_SMO1TH_PLL_BDW 0x01 /* Set Smo1th Pll BandWidth Command Params */ +#define SET_SMO1TH_SPDFLITER_FC 0x02 /* Set Smo1th Fc Command Params */ +#define SET_SMO1TH_FILCOMPANGLE 0x03 /* Set Smo1th FillComp Command Params */ + +#define SET_SMO4TH_KD 0x01 /* Set Smo4th Kd Command Params */ +#define SET_SMO4TH_KP 0x02 /* Set Smo4th Kq Command Params */ + +#define SET_SPD_COMMAND_HZ 0x01 /* Set Target Speed Command Params */ +#define SET_SPD_RMG_SLOPE 0x02 /* Set Speed Slope Command Params */ + +#define SET_MAX_ELEC_SPD 0x01 /* Set Max Motor Speed Command Params */ +#define SET_MOTOR_NUM_OF_PAIRS 0x02 /* Set Motor Command Params */ + +#define SET_MOTOR_RES_OF_STATOR 0x01 /* Set Motor Res Command Params */ +#define SET_MOTOR_DAXIS_INDUCTANCE 0x02 /* Set Motor Daxis Inductance Command Params */ +#define SET_MOTOR_QAXIS_INDUCTANCE 0x03 /* Set Motor Qaxis Inductance Command Params */ + +#define SET_SVPWM_VOLTAGE_PER_UNIT 0x01 /* Set Svpwm Voltage Params */ +#define SET_ADC_CURRENT_SAMPLE_COFE 0x02 /* Set Adc coffe Params */ +#define SET_CURRENT_LOOP_CONTROL_PERIOD 0x03 /* Set Current loop period Command Params */ + +#define SET_IF_TARGET_CURRENT_VALUE 0x01 /* Set If Target Params */ +#define SET_INCREMENT_OF_IF_CURRENT 0x02 /* Set If Step Command Params */ +#define SET_SPEED_RING_BEGIN_SPEED 0x03 /* Set If to Smo Start Speed Command Params */ + +static unsigned char ackCode = 0; +static unsigned char g_uartTxBuf[CUSTACKCODELEN] = {0}; + +/** + * @brief Set observer type. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverType(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + if (funcCode == FOC_OBSERVERTYPE_SMO1TH) { + ackCode = 0X01; + mtrCtrl->obserType = FOC_OBSERVERTYPE_SMO1TH; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->obserType); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH) { + ackCode = 0X02; + mtrCtrl->obserType = FOC_OBSERVERTYPE_SMO4TH; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->obserType); + } +} + +/** + * @brief Set pid parameter ack code. + * @param funcCode Received data funccode. + */ +static unsigned char SetPidAckCode(int funcCode) +{ + switch (funcCode) { + /* Set current loop D-Axis PID parameter ack code. */ + case FOC_CURDAXISPID_PARAMS: + ackCode = 0xE0; + break; + /* Set current loop Q-Axis PID parameter ack code. */ + case FOC_CURQAXISPID_PARAMS: + ackCode = 0xE3; + break; + /* Set speed loop PID parameter ack code. */ + case FOC_SPDPID_PARAMS: + ackCode = 0xE6; + break; + default: + break; + } + return ackCode; +} + +/** + * @brief Set pid parameters. + * @param pidHandle The pid control handle. + * @param rxData Receive buffer + */ +static void SetPidParams(PID_Handle *pidHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + switch (cmdCode) { + case SET_PID_KP: /* Set the P parameter. */ + PID_SetKp(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_KP), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_KI: /* Set the I parameter. */ + PID_SetKi(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_KI), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_LIMIT: /* Set the pid limit. */ + PID_SetLimit(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_LIMIT), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor pid parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorPidParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_CURDAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.dAxisPi, rxData); /* Set Curr loop Daxis pid params */ + } else if (funcCode == FOC_CURQAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.qAxisPi, rxData); /* Set Curr loop Qaxis pid params */ + mtrCtrl->currCtrl.dAxisPi.upperLimit = mtrCtrl->currCtrl.qAxisPi.upperLimit; + mtrCtrl->currCtrl.dAxisPi.lowerLimit = mtrCtrl->currCtrl.qAxisPi.lowerLimit; + } else if (funcCode == FOC_SPDPID_PARAMS) { + SetPidParams(&mtrCtrl->spdCtrl.spdPi, rxData); /* Set Speed loop params */ + } +} + +/** + * @brief Set first order sliding mode observer parameters. + * @param smoHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo1thParams(FOSMO_Handle *smoHandle, CUSTDATATYPE_DEF *rxData) +{ + smoHandle->kSmo = rxData->data[DATA_SEGMENT_TWO].typeF; + ackCode = 0X09; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->kSmo); +} + +/** + * @brief Set first order sliding mode observer's phase-locked loop parameters. + * @param smoHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo1thPLLParams(FOSMO_Handle *smoHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + float pllBdw = 0.0f; + switch (cmdCode) { + case SET_SMO1TH_PLL_BDW: /* Set the bandwidth. */ + pllBdw = rxData->data[DATA_SEGMENT_THREE].typeF; + smoHandle->pll.pi.kp = 2.0f * pllBdw; /* kp = 2.0f * pllBdw */ + smoHandle->pll.pi.ki = pllBdw * pllBdw; /* ki = pllBdw * pllBdw */ + ackCode = 0X0A; + CUST_AckCode(g_uartTxBuf, ackCode, pllBdw); + break; + case SET_SMO1TH_SPDFLITER_FC: /* Set the cutoff frequency. */ + smoHandle->spdFilter.fc = rxData->data[DATA_SEGMENT_THREE].typeF; + smoHandle->spdFilter.a1 = 1.0f / (1.0f + DOUBLE_PI * smoHandle->spdFilter.fc * CTRL_CURR_PERIOD); + smoHandle->spdFilter.b1 = 1.0f - smoHandle->spdFilter.a1; + ackCode = 0X0B; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->spdFilter.fc); + break; + case SET_SMO1TH_FILCOMPANGLE: /* Set the compensation angle. */ + smoHandle->filCompAngle = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0C; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->filCompAngle); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set fourth order sliding mode observer parameters. + * @param smo4thHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo4thParams(SMO4TH_Handle *smo4thHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SMO4TH_KD: /* Set d axis gain. */ + smo4thHandle->kd = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0D; + CUST_AckCode(g_uartTxBuf, ackCode, smo4thHandle->kd); + break; + case SET_SMO4TH_KP: /* Set q axis gain. */ + smo4thHandle->kq = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0E; + CUST_AckCode(g_uartTxBuf, ackCode, smo4thHandle->kq); + break; + default: + break; + } +} + +/** + * @brief Set fourth order sliding mode observer's phase-locked loop parameters. + * @param smo4thHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo4thPLLParams(SMO4TH_Handle *smo4thHandle, CUSTDATATYPE_DEF *rxData) +{ + float pllBdw = rxData->data[DATA_SEGMENT_TWO].typeF; + smo4thHandle->pll.pi.kp = (2.0f) * pllBdw; /* kp = 2.0f * pllBdw */ + smo4thHandle->pll.pi.ki = pllBdw * pllBdw; + ackCode = 0X11; + CUST_AckCode(g_uartTxBuf, ackCode, pllBdw); +} + +/** + * @brief Set observer parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_OBSERVERTYPE_SMO1TH) { + SetObserverSmo1thParams(&mtrCtrl->smo, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO1TH_PLL) { + SetObserverSmo1thPLLParams(&mtrCtrl->smo, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH) { + SetObserverSmo4thParams(&mtrCtrl->smo4th, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH_PLL) { + SetObserverSmo4thPLLParams(&mtrCtrl->smo4th, rxData); + } +} + +/** + * @brief Set motor speed and speed slope. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorSpdAndSlope(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SPD_COMMAND_HZ: /* Set target speed(hz). */ + mtrCtrl->spdCmdHz = rxData->data[DATA_SEGMENT_THREE].typeF * mtrCtrl->mtrParam.mtrNp / CONST_VALUE_60; + /* Judgement the value > 0.00001, make sure denominator != 0. */ + if (rxData->data[DATA_SEGMENT_FOUR].typeF > 0.00001f) { + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_FOUR].typeF * CTRL_SYSTICK_PERIOD; + } + ackCode = 0X16; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->spdCmdHz); + break; + case SET_SPD_RMG_SLOPE: /* Set speed slope. */ + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_THREE].typeF * CTRL_SYSTICK_PERIOD; + ackCode = 0X17; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor base parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorBaseParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MAX_ELEC_SPD: /* Set max electric speed. */ + mtrParamHandle->maxElecSpd = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrParamHandle->mtrNp; + ackCode = 0X18; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_MOTOR_NUM_OF_PAIRS: /* Set the number of motor pole pairs. */ + mtrParamHandle->mtrNp = (unsigned short)(rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = 0X19; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrParamHandle->mtrNp); + break; + default: + break; + } +} + +/** + * @brief Set motor special parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorSpecialParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MOTOR_RES_OF_STATOR: /* Set the resistor of stator. */ + mtrParamHandle->mtrRs = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1A; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrRs); + break; + case SET_MOTOR_DAXIS_INDUCTANCE: /* Set the d axis inductance. */ + mtrParamHandle->mtrLd = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1B; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLd); + break; + case SET_MOTOR_QAXIS_INDUCTANCE: /* Set the q axis inductance. */ + mtrParamHandle->mtrLq = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1C; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLq); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor board parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetMotorBoardParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SVPWM_VOLTAGE_PER_UNIT: /* Set svpwm voltage per unit. */ + mtrCtrl->sv.voltPu = rxData->data[DATA_SEGMENT_THREE].typeF * ONE_DIV_SQRT3; + mtrCtrl->currCtrl.outLimit = mtrCtrl->sv.voltPu * ONE_DIV_SQRT3; + ackCode = 0X1D; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_ADC_CURRENT_SAMPLE_COFE: /* Set adc current sample cofeature. */ + mtrCtrl->adcCurrCofe = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1E; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->adcCurrCofe); + break; + case SET_CURRENT_LOOP_CONTROL_PERIOD: /* Set current loop control period. */ + mtrCtrl->currCtrlPeriod = 1 / rxData->data[DATA_SEGMENT_THREE].typeF * CONST_VALUE_DIV_1000; + ackCode = 0X1F; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == MOTOR_PARAMS_BASE) { + SetMotorBaseParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_SPECIAL) { + SetMotorSpecialParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_BOARD) { + SetMotorBoardParams(mtrCtrl, rxData); + } +} + +/** + * @brief Motor start. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStart(MTRCTRL_Handle *mtrCtrl) +{ + if (mtrCtrl->stateMachine != FSM_RUN) { + SysCmdStartSet(&mtrCtrl->statusReg); /* start motor. */ + mtrCtrl->motorStateFlag = 1; + ackCode = 0X24; /* send ackcode to host. */ + CUST_AckCode(g_uartTxBuf, ackCode, 1); + } +} + +/** + * @brief Motor stop. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStop(MTRCTRL_Handle *mtrCtrl) +{ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + ackCode = 0X25; + CUST_AckCode(g_uartTxBuf, ackCode, 0); +} + +/** + * @brief Motor state reset. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorReset(MTRCTRL_Handle *mtrCtrl) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_SoftReset(); +} + +/** + * @brief Set IF-Startup parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetStartupIFParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_IF_TARGET_CURRENT_VALUE: /* Set I/F start up target current value. */ + mtrCtrl->ifCtrl.targetAmp = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X26; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.targetAmp); + break; + case SET_INCREMENT_OF_IF_CURRENT: /* Set increment of I/F start up current. */ + mtrCtrl->ifCtrl.stepAmp = mtrCtrl->ifCtrl.targetAmp / rxData->data[DATA_SEGMENT_THREE].typeF * + CTRL_SYSTICK_PERIOD; + ackCode = 0X27; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.stepAmp); + break; + case SET_SPEED_RING_BEGIN_SPEED: /* Set speed ring begin speed. */ + mtrCtrl->startup.spdBegin = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrCtrl->mtrParam.mtrNp; + ackCode = 0X28; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set start up parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetStartupParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_STARTUP_IF) { + SetStartupIFParams(mtrCtrl, rxData); + } +} + +/** + * @brief Set adjust speed mode. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetAdjustSpdMode(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get commond code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + if (funcCode == HOST_SPEED_ADJUST) { + mtrCtrl->spdAdjustMode = HOST_SPEED_ADJUST; + /* Uart connect success. */ + mtrCtrl->uartConnectFlag = CONNECTING; + ackCode = 0X2A; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + } else if (funcCode == CUST_SPEED_ADJUST) { + if (cmdCode == 1) { /* If uart connection disconnected & stop motor commond. */ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + } + mtrCtrl->spdAdjustMode = CUST_SPEED_ADJUST; + ackCode = 0X2B; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + /* Uart disconnect. */ + mtrCtrl->uartConnectFlag = DISCONNECT; + } +} + +/** + * @brief Check uart connect. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_UartHandShake(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); +} + +/** + * @brief Set Motor Initial Status Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorInitParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_OBSERVER_TYPE: { /* Set observer type. */ + CMDCODE_SetObserverType(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_PID_PARAMS: { /* Set motor pid parameters. */ + CMDCODE_SetMotorPidParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_OBSERVER_PARAMS: { /* Set observer parameters. */ + CMDCODE_SetObserverParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_TARGETSPD: { /* Set motor speed and speed slope. */ + CMDCODE_SetMotorSpdAndSlope(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_PARAMS: { /* Set motor parameters. */ + CMDCODE_SetMotorParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_ADJUSTSPD_MODE: /* Set adjust speed mode. */ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); + break; + default: + break; + } +} + +/** + * @brief Set Motor Control System Status. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorState(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + BASE_FUNC_UNUSED(rxData); + switch (code) { + case CMDCODE_MOTOR_START: { /* Motor start command */ + CMDCODE_MotorStart(mtrCtrl); + } + break; + case CMDCODE_MOTOR_STOP: { /* Motor stop command */ + CMDCODE_MotorStop(mtrCtrl); + } + break; + case CMDCODE_MOTORSTATE_RESET: { /* Motor reset command */ + CMDCODE_MotorReset(mtrCtrl); + } + break; + default: + break; + } +} + +/** + * @brief Set Startup and Uart Link Handshake Flag Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetOtherParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_STARTUP_PARAMS: /* Set start up parameters. */ + CMDCODE_SetStartupParams(mtrCtrl, rxData); + break; + case CMDCODE_UART_HANDSHAKE: { /* Check uart hand shake. */ + CMDCODE_UartHandShake(mtrCtrl, rxData); + } + break; + case CMDCODE_UART_HEARTDETECT: { /* Check uart hand shake. */ + mtrCtrl->uartHeartDetCnt++; + } + break; + default: + break; + } +} +/** + * @brief Instruction code executor. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_Process(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + CMDCODE_EXE_SetMotorInitParams(mtrCtrl, rxData, code); + CMDCODE_EXE_SetMotorState(mtrCtrl, rxData, code); + CMDCODE_EXE_SetOtherParams(mtrCtrl, rxData, code); +} + +/** + * @brief Host data download callback and data parsing. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + + /* Uart data storage struct */ + CUSTDATATYPE_DEF data; + volatile unsigned char *ptrCnt = &rxBuf[FRAME_CHECK_BEGIN + 1]; + volatile unsigned char *strCnt = &data.data[0].typeCh[0]; + for (unsigned int j = 0; j < FRAME_RECV_DATA_LENTH * FRAME_ONE_DATA_LENTH; j++) { + *strCnt++ = *ptrCnt++; + } + /* Message function code. */ + data.code = rxBuf[FRAME_CHECK_BEGIN]; + CMDCODE_EXE_Process(mtrCtrl, &data, data.code); +} + +/** + * @brief The host computer displays data transmission. + * @param mtrCtrl The motor control handle. + * @param txData Message content. + * @param stage Message status function code. + */ +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txData != NULL); + if (mtrCtrl->stateMachine == FSM_IDLE) { + mtrCtrl->smo.spdEst = 0.0f; + } + /* Data send to host. */ + txData->data[CURRDQ_Q].typeF = mtrCtrl->idqFbk.q; + txData->data[CURRDQ_D].typeF = mtrCtrl->idqFbk.d; + txData->data[CURRREFDQ_Q].typeF = mtrCtrl->idqRef.q; + txData->data[CURRREFDQ_D].typeF = mtrCtrl->idqRef.d; + /* Motor current speed. */ + txData->data[CURRSPD].typeF = mtrCtrl->smo.spdEst * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Motor commond speed. */ + txData->data[SPDCMDHZ].typeF = mtrCtrl->spdCmdHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Bus voltage. */ + txData->data[UDC].typeF = mtrCtrl->udc; + /* Power board temprature. */ + txData->data[POWERBOARDTEMP].typeF = mtrCtrl->powerBoardTemp; + /* Motor protection status flag. */ + txData->data[CUST_ERR_CODE].typeI = mtrCtrl->prot.motorErrStatus.all; + /* Three phase current. */ + txData->data[CURRUVW_U].typeF = mtrCtrl->currUvw.u; + txData->data[CURRUVW_V].typeF = mtrCtrl->currUvw.v; + txData->data[CURRUVW_W].typeF = mtrCtrl->currUvw.w; + /* Three phase pwm duty. */ + txData->data[PWMDUTYUVW_U].typeF = mtrCtrl->dutyUvw.u; + txData->data[PWMDUTYUVW_V].typeF = mtrCtrl->dutyUvw.v; + txData->data[PWMDUTYUVW_W].typeF = mtrCtrl->dutyUvw.w; + /* Motor electric angle. */ + txData->data[AXISANGLE].typeF = mtrCtrl->axisAngle; + txData->data[VDQ_Q].typeF = mtrCtrl->vdqRef.q; + txData->data[VDQ_D].typeF = mtrCtrl->vdqRef.d; + txData->data[SPDREFHZ].typeF = mtrCtrl->spdRefHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + txData->data[SENDTIMESTAMP].typeF = mtrCtrl->uartTimeStamp; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h new file mode 100644 index 00000000..60fe69bb --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h @@ -0,0 +1,36 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "protocol.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); + +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c new file mode 100644 index 00000000..58bf15a7 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c @@ -0,0 +1,57 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of human-machine interface. + */ + +#include "hmi_module.h" +#include "mcs_assert.h" + +/** + * @brief HMI Initializatio. + * @retval None. + */ +void HMI_Init(void) +{ + UartRecvInit(); +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Rx(mtrCtrl); +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Tx(mtrCtrl); +} diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h new file mode 100644 index 00000000..056f8d73 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h @@ -0,0 +1,37 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "uart_module.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void HMI_Init(void); + +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl); +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c new file mode 100644 index 00000000..56f0c0bb --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c @@ -0,0 +1,174 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ + +#include "protocol.h" +#include "apt.h" +#include "typedefs.h" +#include "main.h" +#include "mcs_assert.h" +#include "cust_process.h" + +/** + * @brief Callback function for receiving data analysis and processing. + * @param rxBuf Receive buffer. + */ +__weak void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(rxBuf); +} +/** + * @brief User-defined protocol message sending function (weak function). + * @param rxData Sending Messages.. + */ +__weak void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(*txData); +} + +static void (*g_ptrDataProcess)(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) = CUST_UartDataProcess; + +/** + * @brief Frame checksum. + * @param ptr Pointer to the data to be checked + * @param num Number of bytes + * @retval unsigned char Checksum + */ +static unsigned char CheckSum(unsigned char *ptr, unsigned char num) +{ + unsigned char sum = 0; + unsigned char *p = ptr; + /* Calculate the sum of received data. */ + for (unsigned char i = 0; i < num; i++) { + sum += (unsigned char)*p; + p++; + } + return sum; +} + +/** + * @brief Transmitting Data Frames. + * @param mtrCtrl The motor control handle. + * @param txBuf Sending Messages. + */ +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txBuf != NULL); + unsigned int dataLen = FRAME_ONE_DATA_LENTH * SEND_FRAME_DATA_NUM; + unsigned char i = 0; + CUSTDATATYPE_DEF txData = {0}; + CUST_SetTxMsg(mtrCtrl, &txData); + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_SENT; + /* Message data */ + for (unsigned char x = 0; x < SEND_FRAME_DATA_NUM; x++) { + unsigned char floatIndex = 0; + unsigned char byteOffset = i; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + } + /* Message verification domain */ + txBuf[dataLen + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[dataLen + i++] = FRAME_END; + return dataLen + i; +} + +/** + * @brief Transmitting Data Frames. + * @param txBuf Sending Cust Ack Code. + * @param ackCode Ack Code. + * @param varParams Host set parameter. + */ +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(txBuf != NULL); + CUSTDATATYPE_DEF txData = {0}; + int dataIndex = 0; + unsigned int i = 0; + unsigned int txLen = 0; + unsigned char dataLen = FRAME_ONE_CHAR_LENTH + FRAME_ONE_DATA_LENTH; + + txData.data[0].typeF = varParams; + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_CUSTACK; + /* Message ack code */ + txBuf[i++] = ackCode; + /* Message data */ + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + + /* Message verification domain */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = FRAME_END; + txLen = FRAME_ONE_CHAR_LENTH + i++; + HAL_UART_WriteDMA(&g_uart0, txBuf, txLen); +} + +/** + * @brief Cust receive data process. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + unsigned char g_uartTxBuf[10] = {0}; + unsigned char ackCode = 0; + /* Frame header check */ + if (rxBuf[0] != FRAME_START) { + ackCode = 0X78; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Frame trailer check */ + if (rxBuf[FRAME_LENTH - 1] != FRAME_END) { + ackCode = 0X79; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Checksum */ + if (CheckSum((unsigned char*)&rxBuf[FRAME_CHECK_BEGIN], FRAME_CHECK_NUM) != rxBuf[FRAME_CHECKSUM]) { + ackCode = 0X7A; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } else { + if (g_ptrDataProcess == NULL) { + return; + } else { + g_ptrDataProcess(mtrCtrl, rxBuf); + } + } +} diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h new file mode 100644 index 00000000..900a00d8 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h @@ -0,0 +1,121 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ +#ifndef McsMagicTag_PORTOCOL_H +#define McsMagicTag_PORTOCOL_H + +#include "uart.h" +#include "mcs_carrier.h" + +#define RS485_SEND_ENABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = GPIO_PIN_7 +#define RS485_SEND_DISABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = BASE_CFG_UNSET + +#define RX_BUF_LEN (16) +#define SEND_FRAME_DATA_NUM (CUSTDATA_MAX) +/* Service Uart0 Communication Deal */ +#define FRAME_ONE_DATA_LENTH 4 +#define FRAME_ONE_CHAR_LENTH 1 +#define FRAME_RECV_DATA_LENTH 4 +#define FRAME_LENTH 20 /* Data length */ +#define FRAME_SENT 0X8F +#define FRAME_CUSTACK 0X8A +#define FRAME_START 0x0F /* Start frame */ +#define FRAME_END '/' /* StOP frame */ +#define FRAME_CHECK_BEGIN 1 /* Check frame */ +#define FRAME_CHECKSUM 18 /* Check sum */ +#define FRAME_CHECK_NUM 17 +#define CMDCODE_IDLE_FRAME 0x55 /* Fill frame */ +#define CMDCODE_GET_MOTOR_PARAMS 0x01 +#define CMDCODE_SEND_MOTOR_PARAMS 0x02 +#define CMDCODE_SET_MOTOR_CTLMODE 0x03 +#define CMDCODE_SET_OBSERVER_TYPE 0x04 +#define CMDCODE_SET_STARTUP_MODE 0x05 +#define CMDCODE_SET_PID_PARAMS 0x06 +#define CMDCODE_SET_STARTUP_PARAMS 0x07 +#define CMDCODE_SET_OBSERVER_PARAMS 0x08 +#define CMDCODE_SET_MOTOR_TARGETSPD 0x09 +#define CMDCODE_SET_MOTOR_PARAMS 0x0A +#define CMDCODE_MOTOR_START 0x0B +#define CMDCODE_MOTOR_STOP 0x0C +#define CMDCODE_MOTORSTATE_RESET 0x0D +#define CMDCODE_SEND_FIRMVERSION 0x0E +#define CMDCODE_SET_ADJUSTSPD_MODE 0x11 +#define CMDCODE_UART_HANDSHAKE 0x12 +#define CMDCODE_UART_HEARTDETECT 0x13 + +typedef union { + unsigned char typeCh[4]; + float typeF; + int typeI; +} UNIONDATATYPE_DEF; + +typedef enum { + OFFLINE_RES = 0, + OFFLINE_LD, + OFFLINE_LQ, + OFFLINE_PSIF, + OFFLINE_JS, + OFFLINE_NP, + OFFLINE_B, + OFFLINE_KPD, + OFFLINE_KID, + OFFLINE_KPQ, + OFFLINE_KIQ, + OFFLINE_KPS, + OFFLINE_KIS, + OFFLINE_SPEED, + OFLINE_MAX +} OFFLINE_IDEN_TYPE; + +typedef enum { + CURRDQ_Q = 0, + CURRDQ_D, + CURRREFDQ_Q, + CURRREFDQ_D, + CURRSPD, + SPDCMDHZ, + UDC, + POWERBOARDTEMP, + CUST_ERR_CODE, + CURRUVW_U, + CURRUVW_V, + CURRUVW_W, + PWMDUTYUVW_U, + PWMDUTYUVW_V, + PWMDUTYUVW_W, + AXISANGLE, + VDQ_Q, + VDQ_D, + SPDREFHZ, + SENDTIMESTAMP, + CUSTDATA_MAX +} SENDTOHOSTPARAMS; + +typedef struct { + volatile unsigned char code; + volatile UNIONDATATYPE_DEF data[SEND_FRAME_DATA_NUM]; +} CUSTDATATYPE_DEF; + + +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf); +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams); +#endif /* McsMagicTag_PORTOCOL_H */ diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c new file mode 100644 index 00000000..df5e9186 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c @@ -0,0 +1,184 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#include "uart_module.h" +#include "debug.h" +#include "main.h" +#include "baseinc.h" + +/* Buffer size */ +#define UI_TX_BUF_LEN (96) +#define UI_RX_BUF_LEN (96) + +/* Receiving Timeout Interval */ +#define UART_TIME_OUT_MS (100) + +/* Start sending data to host delay after uart connect success */ +#define UART_UPDATA_DELAY_TIME_MS (50) + +/* Data buffer */ +unsigned char g_uartRxBuf[UI_RX_BUF_LEN] = {0}; +unsigned char g_uartTxBuf[UI_TX_BUF_LEN] = {0}; +static unsigned int getdeltaSystickCnt = 0; +static FRAME_Handle g_uartFrame; +/** + * @brief Receive Data Clear. + * @param uartFrame Receice Data. + * @retval None. + */ +static void FrameRecvClear(FRAME_Handle *uartFrame) +{ + /* Clear buffer lenth. */ + uartFrame->buffLen = 0; + uartFrame->timeOutCnt = 0; + uartFrame->frameFlag = 0; + /* Clear received data lenth. */ + uartFrame->rxLen = 0; + /* Clear received flag. */ + uartFrame->rxFlag = 0; + uartFrame->upDataCnt = 0; + uartFrame->rxAckFlag = 0; +} + +/** + * @brief Set Dma status. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void SetUartDmaStatus(MTRCTRL_Handle *mtrCtrl) +{ + /* Delay 50ms start uart Tx DMA . */ + if (mtrCtrl->uartConnectFlag == CONNECTING && g_uartFrame.upDataDelayCnt++ > UART_UPDATA_DELAY_TIME_MS) { + g_uartFrame.txFlag = 1; /* Start send data flag. */ + mtrCtrl->uartConnectFlag = CONNECTED; + g_uartFrame.upDataDelayCnt = 0; + } + if (mtrCtrl->uartConnectFlag == DISCONNECT) { + g_uartFrame.txFlag = 0; /* Stop send data flag. */ + mtrCtrl->uartTimeStamp = 0; + } +} + +/** + * @brief Uart Dma interupt callback func. + * @param handle Uart handle. + * @retval None. + */ +void UART0_TXDMACallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + unsigned int getCurSystickCnt = 0; + static unsigned int getlastSystickCnt = 0; + /* USER CODE BEGIN UART0_WRITE_DMA_FINISH */ + g_uartFrame.txFlag = 1; + /* Received information answered, information update reserved. */ + if (g_uartFrame.rxAckFlag == 1) { + g_uartFrame.uartItTxFlag = 1; + g_uartFrame.rxAckFlag = 0; + } + getCurSystickCnt = DCL_SYSTICK_GetTick(); + if (getlastSystickCnt != 0) { + /* Calculate unit frame data send time */ + getdeltaSystickCnt = getCurSystickCnt - getlastSystickCnt; + } + getlastSystickCnt = getCurSystickCnt; + /* USER CODE END UART0_WRITE_DMA_FINISH */ +} + +/** + * @brief Uart0 Interruput Read CallBack Function. + * @param handle Uart handle. + * @retval None. + */ +void UART0ReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_READ_IT_FINISH */ + if (g_uartFrame.rxLen >= UI_RX_BUF_LEN - 1) { + g_uartFrame.rxLen = 0; + } + HAL_UART_ReadIT(handle, &g_uartFrame.rxData, 1); + g_uartRxBuf[g_uartFrame.rxLen] = g_uartFrame.rxData; + g_uartFrame.rxLen++; + g_uartFrame.rxFlag = 1; + g_uartFrame.uartItTxFlag = 0; + return; + /* USER CODE END UART0_READ_IT_FINISH */ +} + +/** + * @brief Uart Read Data Init Function. + * @param void. + * @retval None. + */ +void UartRecvInit(void) +{ + /* Uart reception initialization */ + FrameRecvClear(&g_uartFrame); + HAL_UART_ReadIT(&g_uart0, &g_uartFrame.rxData, 1); +} + +/** + * @brief Uart Read Data Process Function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SetUartDmaStatus(mtrCtrl); + if (g_uartFrame.rxFlag == 1) { /* Receive data flag. */ + if (g_uartFrame.timeOutCnt++ > UART_TIME_OUT_MS) { + /* Received data from the host. */ + g_uartFrame.frameFlag = 1; + g_uartFrame.rxFlag = 0; + g_uartFrame.timeOutCnt = 0; + /* Execute data process. */ + CUST_DataReceProcss(mtrCtrl, g_uartRxBuf); + g_uartFrame.rxAckFlag = 1; + g_uartFrame.rxLen = 0; + } + } + g_uartFrame.frameFlag = 0; +} + +/** + * @brief Uart Write Data Process Function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + if (g_uartFrame.txFlag == 1) { /* Send data flag. */ + mtrCtrl->uartTimeStamp = (float)getdeltaSystickCnt; /* Unit data time stamp */ + g_uartFrame.upDataCnt = 0; + g_uartFrame.txFlag = 0; + /* Send data to host. */ + unsigned int txLen = CUST_TransmitData(mtrCtrl, g_uartTxBuf); + /* If txIT mode send data finish, convert to DMA mode */ + if (g_uartFrame.uartItTxFlag == 1) { + HAL_UART_WriteDMA(&g_uart0, g_uartTxBuf, txLen); + } + } +} diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h new file mode 100644 index 00000000..f1f8f899 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h @@ -0,0 +1,47 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#ifndef McsMagicTag_UART_MODULE_H +#define McsMagicTag_UART_MODULE_H + +#include "protocol.h" +#include "mcs_ctlmode_config.h" + +typedef struct { + unsigned int buffLen; + unsigned int timeOutCnt; + unsigned char frameFlag; + unsigned int rxLen; + unsigned char rxFlag; + unsigned char txFlag; + unsigned char rxData; + unsigned int upDataCnt; + unsigned int upDataDelayCnt; + unsigned char uartItTxFlag; + unsigned char rxAckFlag; +} FRAME_Handle; + + +void UartRecvInit(void); +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl); +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/feature.h b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/feature.h new file mode 100644 index 00000000..d78fadee --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/feature.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-23 16:53:46 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define CHIP_3061MNPICA MACRO_ENABLE + +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 30000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_UART_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/main.h b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/main.h new file mode 100644 index 00000000..1cee8d4d --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/main.h @@ -0,0 +1,91 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.h + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-23 16:53:46 + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_SYSTEM_INIT_H +#define McuMagicTag_SYSTEM_INIT_H + +#include "adc.h" +#include "adc_ex.h" +#include "acmp.h" +#include "acmp_ex.h" +#include "apt.h" +#include "uart.h" +#include "uart_ex.h" +#include "gpio.h" +#include "timer.h" +#include "timer_ex.h" +#include "crg.h" +#include "iocmg.h" + +#define IO_SPEED_FAST 0x00U +#define IO_SPEED_SLOW 0x01U + +#define IO_DRV_LEVEL4 0x00U +#define IO_DRV_LEVEL3 0x01U +#define IO_DRV_LEVEL2 0x02U +#define IO_DRV_LEVEL1 0x03U + +#define XTAL_DRV_LEVEL4 0x03U +#define XTAL_DRV_LEVEL3 0x02U +#define XTAL_DRV_LEVEL2 0x01U +#define XTAL_DRV_LEVEL1 0x00U + +#define SYS_LED_PIN GPIO_PIN_3 +#define SYS_LED_HANDLE g_gpio2 +#define GpioStartStop_PIN GPIO_PIN_4 +#define GpioStartStop_HANDLE g_gpio2 + +extern ACMP_Handle g_acmp0; +extern TIMER_Handle g_timer1; +extern UART_Handle g_uart0; +extern APT_Handle g_apt0; +extern APT_Handle g_apt1; +extern APT_Handle g_apt2; +extern ADC_Handle g_adc0; + +extern GPIO_Handle g_gpio1; +extern GPIO_Handle g_gpio2; +extern UART_Handle g_uart3; + + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect); +void SystemInit(void); + +void MotorStatemachineCallBack(void *handle); +void TIMER1_DMAOverFlow_InterruptProcess(void *handle); +void MotorCarrierProcessCallback(void *aptHandle); +void MotorSysErrCallback(void *aptHandle); + +void MotorStartStopKeyCallback(void *param); + + +void UART3_wifiWriteInterruptCallback(void *handle); +void UART3_wifiReadInterruptCallback(void *handle); + +void UART3_wifiInterruptErrorCallback(void *handle); +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_SYSTEM_INIT_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/system_init.c b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/system_init.c new file mode 100644 index 00000000..b5975d6b --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/generatecode/system_init.c @@ -0,0 +1,597 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file system_init.c + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-23 16:53:46 + */ + +#include "main.h" +#include "ioconfig.h" +#include "iocmg_ip.h" + +#define UART0_BAUD_RATE 115200 +#define UART3_BAUD_RATE 115200 + + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) +{ + CRG_Handle crg; + crg.baseAddress = CRG; + crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC; + crg.pllPreDiv = CRG_PLL_PREDIV_4; + crg.pllFbDiv = 48; /* PLL Multiplier 48 */ + crg.pllPostDiv = CRG_PLL_POSTDIV_2; + crg.coreClkSelect = CRG_CORE_CLK_SELECT_PLL; + crg.handleEx.pllPostDiv2 = CRG_PLL_POSTDIV2_3; + crg.handleEx.clk1MSelect = CRG_1M_CLK_SELECT_HOSC; + crg.handleEx.clk1MDiv = (25 - 1); /* The 1 MHz freq is equal to the input clock frequency / (clk_1m_div + 1). 25 is the div of the clk_1m in CLOCK. */ + + if (HAL_CRG_Init(&crg) != BASE_STATUS_OK) { + return BASE_STATUS_ERROR; + } + *coreClkSelect = crg.coreClkSelect; + return BASE_STATUS_OK; +} + +static void ACMP0_Init(void) +{ + HAL_CRG_IpEnableSet(ACMP0_BASE, IP_CLK_ENABLE); /* ACMP clock bit reset. */ + g_acmp0.baseAddress = ACMP0_BASE; + g_acmp0.inOutConfig.inputNNum = ACMP_INPUT_N_SELECT2; + g_acmp0.inOutConfig.inputPNum = ACMP_INPUT_P_SELECT2; + g_acmp0.inOutConfig.polarity = ACMP_OUT_NOT_INVERT; + g_acmp0.filterCtrl.filterMode = ACMP_FILTER_NONE; + g_acmp0.hysteresisVol = ACMP_HYS_VOL_30MV; + g_acmp0.interruptEn = BASE_CFG_UNSET; + HAL_ACMP_Init(&g_acmp0); +} + +static void ADC0_Init(void) +{ + HAL_CRG_IpEnableSet(ADC0_BASE, IP_CLK_ENABLE); + HAL_CRG_IpClkSelectSet(ADC0_BASE, CRG_ADC_CLK_ASYN_PLL_DIV); + HAL_CRG_IpClkDivSet(ADC0_BASE, CRG_ADC_DIV_1); + + g_adc0.baseAddress = ADC0; + g_adc0.socPriority = ADC_PRIMODE_ALL_ROUND; + + HAL_ADC_Init(&g_adc0); + + SOC_Param socParam = {0}; + socParam.adcInput = ADC_CH_ADCINA11; /* PIN9(ADC AIN11) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM5, &socParam); + + socParam.adcInput = ADC_CH_ADCINA12; /* PIN10(ADC AIN12) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM2, &socParam); + + socParam.adcInput = ADC_CH_ADCINA10; /* PIN8(ADC AIN10) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM6, &socParam); + + socParam.adcInput = ADC_CH_ADCINA9; /* PIN7(ADC AIN9) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM9, &socParam); +} + +__weak void MotorSysErrCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_EVENT_INTERRUPT */ + /* USER CODE END APT0_EVENT_INTERRUPT */ +} + +__weak void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +static void APT0_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_ENABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt0, &protectApt); +} + +static void APT0_Init(void) +{ + HAL_CRG_IpEnableSet(APT0_BASE, IP_CLK_ENABLE); + + g_apt0.baseAddress = APT0; + + /* Clock Settings */ + g_apt0.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt0.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt0.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt0.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt0.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.divInitVal = 0; + g_apt0.waveform.cntInitVal = 0; + g_apt0.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt0.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt0.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt0.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt0.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCA = 6000; /* 6000 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt0.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCA = 1; + + /* ADC Trigger SOCB */ + g_apt0.adcTrg.trgEnSOCB = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCB = 1; + g_apt0.adcTrg.trgSrcSOCB = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCB = 1; + + g_apt0.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + /* Timer Trigger */ + g_apt0.tmrInterrupt.tmrInterruptEn = BASE_CFG_ENABLE; + g_apt0.tmrInterrupt.tmrInterruptSrc = APT_INT_SRC_CNTR_CMPC_UP; + g_apt0.tmrInterrupt.tmrInterruptScale = 1; + + APT0_ProtectInit(); + + HAL_APT_PWMInit(&g_apt0); + HAL_APT_RegisterCallBack(&g_apt0, APT_EVENT_INTERRUPT, MotorSysErrCallback); + IRQ_SetPriority(IRQ_APT0_EVT, 7); /* 7 is priority value */ + IRQ_Register(IRQ_APT0_EVT, HAL_APT_EventIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_EVT); + HAL_APT_RegisterCallBack(&g_apt0, APT_TIMER_INTERRUPT, MotorCarrierProcessCallback); + IRQ_SetPriority(IRQ_APT0_TMR, 6); /* 6 is priority value */ + IRQ_Register(IRQ_APT0_TMR, HAL_APT_TimerIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_TMR); +} + +static void APT1_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt1, &protectApt); +} + +static void APT1_Init(void) +{ + HAL_CRG_IpEnableSet(APT1_BASE, IP_CLK_ENABLE); + + g_apt1.baseAddress = APT1; + + /* Clock Settings */ + g_apt1.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt1.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt1.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt1.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt1.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.divInitVal = 0; + g_apt1.waveform.cntInitVal = 0; + g_apt1.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt1.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt1.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt1.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt1.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt1.adcTrg.cntCmpSOCA = 1; /* 1 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt1.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_ZERO; + g_apt1.adcTrg.trgScaleSOCA = 1; + + g_apt1.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + APT1_ProtectInit(); + + HAL_APT_PWMInit(&g_apt1); +} + +static void APT2_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt2, &protectApt); +} + +static void APT2_Init(void) +{ + HAL_CRG_IpEnableSet(APT2_BASE, IP_CLK_ENABLE); + + g_apt2.baseAddress = APT2; + + /* Clock Settings */ + g_apt2.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt2.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt2.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt2.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt2.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.divInitVal = 0; + g_apt2.waveform.cntInitVal = 0; + g_apt2.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt2.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt2.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt2.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt2.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + APT2_ProtectInit(); + + HAL_APT_PWMInit(&g_apt2); +} + +__weak void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + BASE_FUNC_UNUSED(handle); +} + +static void GPIO_Init(void) +{ + HAL_CRG_IpEnableSet(GPIO1_BASE, IP_CLK_ENABLE); + g_gpio1.baseAddress = GPIO1; + + g_gpio1.pins = GPIO_PIN_0; + HAL_GPIO_Init(&g_gpio1); + HAL_GPIO_SetDirection(&g_gpio1, g_gpio1.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio1, g_gpio1.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio1, g_gpio1.pins, GPIO_INT_TYPE_NONE); + + HAL_CRG_IpEnableSet(GPIO2_BASE, IP_CLK_ENABLE); + g_gpio2.baseAddress = GPIO2; + + g_gpio2.pins = GPIO_PIN_3; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_NONE); + + g_gpio2.pins = GPIO_PIN_4; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_INPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_LOW_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_FALL_EDGE); + + HAL_GPIO_RegisterCallBack(&g_gpio2, GPIO_PIN_4, MotorStartStopKeyCallback); + IRQ_Register(IRQ_GPIO2, HAL_GPIO_IrqHandler, &g_gpio2); + IRQ_SetPriority(IRQ_GPIO2, 1); /* set gpio1 interrupt priority to 1, 1~15. 1 is priority value */ + IRQ_EnableN(IRQ_GPIO2); /* gpio interrupt enable */ + + return; +} + +__weak void MotorStatemachineCallBack(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN MotorStatemachineCallBack */ + /* USER CODE END MotorStatemachineCallBack */ +} + +static void TIMER1_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER1_BASE, IP_CLK_ENABLE); /* TIMER1 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER1) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 500; + + g_timer1.baseAddress = TIMER1; + g_timer1.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer1.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer1.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer1.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer1.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer1.interruptEn = BASE_CFG_ENABLE; + g_timer1.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer1.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer1); + IRQ_Register(IRQ_TIMER1, HAL_TIMER_IrqHandler, &g_timer1); + + HAL_TIMER_RegisterCallback(&g_timer1, TIMER_PERIOD_FIN, MotorStatemachineCallBack); + IRQ_SetPriority(IRQ_TIMER1, 2); /* 2 is priority value */ + IRQ_EnableN(IRQ_TIMER1); +} + +static void UART0_Init(void) +{ + HAL_CRG_IpEnableSet(UART0_BASE, IP_CLK_ENABLE); /* UART0 clock enable. */ + g_uart0.baseAddress = UART0; + + g_uart0.baudRate = UART0_BAUD_RATE; + g_uart0.dataLength = UART_DATALENGTH_8BIT; + g_uart0.stopBits = UART_STOPBITS_ONE; + g_uart0.parity = UART_PARITY_NONE; + g_uart0.txMode = UART_MODE_BLOCKING; + g_uart0.rxMode = UART_MODE_BLOCKING; + g_uart0.fifoMode = BASE_CFG_ENABLE; + g_uart0.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart0.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart0.hwFlowCtr = BASE_CFG_DISABLE; + g_uart0.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart0.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart0); +} + +static void IOConfig(void) +{ + SYSCTRL0->SC_SYS_STAT.BIT.update_mode = 0; + SYSCTRL0->SC_SYS_STAT.BIT.update_mode_clear = 1; + /* Config PIN9 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_5_AS_ADC_AIN11); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_5_AS_ADC_AIN11, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_5_AS_ADC_AIN11, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_5_AS_ADC_AIN11, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_5_AS_ADC_AIN11, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN10 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO5_3_AS_ADC_AIN12); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO5_3_AS_ADC_AIN12, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO5_3_AS_ADC_AIN12, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO5_3_AS_ADC_AIN12, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO5_3_AS_ADC_AIN12, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN8 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_6_AS_ADC_AIN10); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_6_AS_ADC_AIN10, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_6_AS_ADC_AIN10, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_6_AS_ADC_AIN10, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_6_AS_ADC_AIN10, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN7 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_7_AS_ADC_AIN9); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_7_AS_ADC_AIN9, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_7_AS_ADC_AIN9, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_7_AS_ADC_AIN9, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_7_AS_ADC_AIN9, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN48 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_6_AS_ACMP_N2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_6_AS_ACMP_N2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_6_AS_ACMP_N2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_6_AS_ACMP_N2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_6_AS_ACMP_N2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN47 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_5_AS_ACMP_P2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_5_AS_ACMP_P2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_5_AS_ACMP_P2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_5_AS_ACMP_P2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_5_AS_ACMP_P2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN1 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_7_AS_ACMP0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_7_AS_ACMP0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_7_AS_ACMP0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_7_AS_ACMP0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_7_AS_ACMP0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN27 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_0_AS_GPIO1_0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_0_AS_GPIO1_0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_0_AS_GPIO1_0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_0_AS_GPIO1_0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_0_AS_GPIO1_0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN35 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_3_AS_GPIO2_3); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_3_AS_GPIO2_3, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_3_AS_GPIO2_3, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_3_AS_GPIO2_3, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_3_AS_GPIO2_3, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN41 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_4_AS_GPIO2_4); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_4_AS_GPIO2_4, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_4_AS_GPIO2_4, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_4_AS_GPIO2_4, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_4_AS_GPIO2_4, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN19 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_0_AS_APT0_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_0_AS_APT0_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_0_AS_APT0_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_0_AS_APT0_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_0_AS_APT0_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN23 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_0_AS_APT0_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_0_AS_APT0_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_0_AS_APT0_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_0_AS_APT0_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_0_AS_APT0_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN20 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_1_AS_APT1_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_1_AS_APT1_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_1_AS_APT1_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_1_AS_APT1_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_1_AS_APT1_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN24 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_1_AS_APT1_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_1_AS_APT1_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_1_AS_APT1_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_1_AS_APT1_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_1_AS_APT1_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN21 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_2_AS_APT2_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_2_AS_APT2_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_2_AS_APT2_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_2_AS_APT2_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_2_AS_APT2_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN25 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_2_AS_APT2_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_2_AS_APT2_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_2_AS_APT2_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_2_AS_APT2_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_2_AS_APT2_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + + /* Config PIN17 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_3_AS_UART3_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_3_AS_UART3_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_3_AS_UART3_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_3_AS_UART3_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_3_AS_UART3_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN18 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_4_AS_UART3_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_4_AS_UART3_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_4_AS_UART3_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_4_AS_UART3_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_4_AS_UART3_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + +} + +static void APT_SyncMasterInit(void) +{ + HAL_APT_MasterSyncInit(&g_apt0, APT_SYNC_OUT_ON_CNTR_ZERO); +} + +static void APT_SyncSlaveInit(void) +{ + APT_SlaveSyncIn aptSlave; + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt1, &aptSlave); + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt2, &aptSlave); + +} + + +__weak void UART3_wifiInterruptErrorCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART3_wifiInterruptErrorCallback */ + /* USER CODE END UART3_wifiInterruptErrorCallback */ +} + +__weak void UART3_wifiWriteInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART3_wifiWriteInterruptCallback */ + /* USER CODE END UART3_wifiWriteInterruptCallback */ +} + +__weak void UART3_wifiReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART3_wifiReadInterruptCallback */ + /* USER CODE END UART3_wifiReadInterruptCallback */ +} + +static void UART3_Init(void) +{ + HAL_CRG_IpEnableSet(UART3_BASE, IP_CLK_ENABLE); /* UART3 clock enable. */ + g_uart3.baseAddress = UART3; + + g_uart3.baudRate = UART3_BAUD_RATE; + g_uart3.dataLength = UART_DATALENGTH_8BIT; + g_uart3.stopBits = UART_STOPBITS_ONE; + g_uart3.parity = UART_PARITY_NONE; + g_uart3.txMode = UART_MODE_INTERRUPT; + g_uart3.rxMode = UART_MODE_INTERRUPT; + g_uart3.fifoMode = BASE_CFG_ENABLE; + g_uart3.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart3.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart3.hwFlowCtr = BASE_CFG_DISABLE; + g_uart3.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart3.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart3); + HAL_UART_RegisterCallBack(&g_uart3, UART_TRNS_IT_ERROR, (UART_CallbackType)UART3_wifiInterruptErrorCallback); + HAL_UART_RegisterCallBack(&g_uart3, UART_WRITE_IT_FINISH, (UART_CallbackType)UART3_wifiWriteInterruptCallback); + HAL_UART_RegisterCallBack(&g_uart3, UART_READ_IT_FINISH, (UART_CallbackType)UART3_wifiReadInterruptCallback); + IRQ_Register(IRQ_UART3, HAL_UART_IrqHandler, &g_uart3); + IRQ_SetPriority(IRQ_UART3, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_UART3); +} + + +void SystemInit(void) +{ + IOConfig(); + UART0_Init(); + ACMP0_Init(); + APT0_Init(); + APT1_Init(); + APT2_Init(); + ADC0_Init(); + TIMER1_Init(); + GPIO_Init(); + + UART3_Init(); + + APT_SyncMasterInit(); + APT_SyncSlaveInit(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/main.c b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/main.c new file mode 100644 index 00000000..161cce56 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/main.c @@ -0,0 +1,70 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + * @date 2025-04-23 16:53:46 + */ + +#include "typedefs.h" +#include "feature.h" +#include "mcs_motor_process.h" +#include "main.h" +#include "wifi.h" + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ +/* USER CODE END 0 */ +ACMP_Handle g_acmp0; +TIMER_Handle g_timer1; +UART_Handle g_uart0; +APT_Handle g_apt0; +APT_Handle g_apt1; +APT_Handle g_apt2; +ADC_Handle g_adc0; +GPIO_Handle g_gpio1; +GPIO_Handle g_gpio2; +UART_Handle g_uart3; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ +/* USER CODE END 1 */ + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + /* USER CODE END 2 */ + MotorMainProcess(); + /* USER CODE BEGIN 3 */ + /* 建议用户放置初始配置代码 */ + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + /* 建议用户放置周期性执行代码 */ + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c new file mode 100644 index 00000000..1479bf5c --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c @@ -0,0 +1,626 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.c + * @author MCU Algorithm Team + * @brief This file provides motor application for ECBMCU201MPC board. + * @details BLDC six-step application based on the ECBMCU201MPC board + * 1) Motor model is Gimbal GBM2804H-100T. + * 2) Select the bldc six-step sensorless example in the sample column + of chipConfig and click Generate Code. + * 3) It's power supply must be changed to 12V. + */ + +#include "debug.h" +#include "mcs_assert.h" +#include "mcs_user_config.h" +#include "mcs_status.h" +#include "mcs_carrier.h" +#include "mcs_motor_process.h" +#include "wifi.h" +#include "MQTT.h" +#include "string.h" +/*------------------------------- Macro Definition -----------------------------------------------*/ +#define US_PER_MS 1000 +#define APT_FULL_DUTY 1.0f + +/* Motor control handle for bldc */ +static MtrCtrlHandle g_mc; + +static APT_RegStruct* g_aptCp[PHASE_MAX_NUM] = {BRIDGE_CTR_APT_U, BRIDGE_CTR_APT_V, BRIDGE_CTR_APT_W}; + +/** + * @brief Initialzer of system tick. + * @param mtrCtrl Motor control struct handle. + * @retval None. + */ +static void TimerTickInit(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysTickCnt = 0; + mtrCtrl->msTickNum = US_PER_MS / SYSTICK_PERIOD_US; + mtrCtrl->capChargeTickNum = (INV_CAP_CHARGE_MS * US_PER_MS / SYSTICK_PERIOD_US); +} + +/** + * @brief Read the ADC current sampling value of the compressor. + * @param CurrUvw Three-phase current. + * @retval None. + */ +static void ReadBemfUVWMotor(UVWBemf *bemfUVW) +{ + MCS_ASSERT_PARAM(bemfUVW != NULL); + bemfUVW->u = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_U_SOC_NUM)&0xFFF); + bemfUVW->v = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_V_SOC_NUM)&0xFFF); + bemfUVW->w = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_W_SOC_NUM)&0xFFF); +} + +/** + * @brief Init motor control task. + * @retval None. + */ +static void TSK_InitMotor(void) +{ + /* Initialize target speed. */ + g_mc.spdCmdHz = SDP_TARGET_VALUE; + /* zeroPoint = IN_VOLTAGE_BUS / 2.0; 4095/3.3 :ADC value corresponding to 1 V */ + g_mc.zeroPoint = ((((float)IN_VOLTAGE_BUS / 2.0) * VOL_DIVIDER_COEFFICIENT) * 4095 / 3.3); + g_mc.pwmDuty = FORCE_DRAG_MINDUTY; + + /* Sets the number of sample filtering times for zero-crossing sampling. */ + g_mc.sysVar.bemfFilterCnt = FILTER_COUNT; + g_mc.sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + + g_mc.stateMachine = FSM_IDLE; + g_mc.aptMaxcntCmp = g_apt0.waveform.timerPeriod; + + /* Speed management initialization. */ + RMG_Init(&g_mc.spdRmg, CTRL_SYSTICK_PERIOD, USER_SPD_SLOPE); /* Init speed slope */ + TimerTickInit(&g_mc); + + /* Pid control parameter initialization. */ + g_mc.spdPi.kp = SPD_PID_KP; + g_mc.spdPi.ki = SPD_PID_KI; + g_mc.spdPi.ts = SPD_PID_TS; + g_mc.spdPi.upperLimit = APT_DUTYLIMIT_MAX; + g_mc.spdPi.lowerLimit = APT_DUTYLIMIT_MIN; + + /* BLDC six-step control initialization. */ + g_mc.stepCtrl.phaseStep = STEP1; + g_mc.stepCtrl.controlApt.u = &g_apt0; + g_mc.stepCtrl.controlApt.v = &g_apt1; + g_mc.stepCtrl.controlApt.w = &g_apt2; +} + + +/** + * @brief Software Initialization. + * @retval None. + */ +static void InitSoftware(void) +{ + TSK_InitMotor(); + + g_mc.readBemfUVW = ReadBemfUVWMotor; +} + +/** + * @brief Enable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputEnable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Enable three-phase pwm output */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_UNSET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_UNSET; + } +} + +/** + * @brief Disable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputDisable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Disable three-phase pwm output. */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_SET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_SET; + DCL_APT_ForcePWMOutputLow(aptx); + } +} + +/** + * @brief Force rotor alignment to home position. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ForceAlign(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); + MotorPwmOutputEnable(g_aptCp); + mtrCtrl->stepCtrl.phaseStep = STEP6; + SixStepPwm(&mtrCtrl->stepCtrl); + BASE_FUNC_DELAY_MS(100); /* Delay 100 ms waiting for rotor alignment. */ + mtrCtrl->stepCtrl.phaseStep = STEP1; + SixStepPwm(&mtrCtrl->stepCtrl); + BASE_FUNC_DELAY_MS(100); /* Delay 100 ms waiting for rotor alignment. */ + mtrCtrl->sysVar.lastZeroPoint = DCL_SYSTICK_GetTick(); +} + +/** + * @brief Pre-processing of motor status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void MotorStatePerProc(SysStatusReg *statusReg, volatile FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* Get system status */ + if (SysIsError(statusReg)) { + *stateMachine = FSM_FAULT; + } + if (SysGetCmdStop(statusReg)) { + SysCmdStopClr(statusReg); + *stateMachine = FSM_WAIT_STOP; + } +} + +/** + * @brief Open the three-phase lower pipe. + * @param aptAddr Three-phase APT address pointer. + * @param maxDutyCnt Max duty count. + * @retval None. + */ +static void AptTurnOnLowSidePwm(APT_RegStruct **aptAddr, unsigned int maxDutyCnt) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(maxDutyCnt != 0); + unsigned int dutyCnt; + dutyCnt = maxDutyCnt * APT_FULL_DUTY; + /* Open the three-phase lower pipe */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->TC_REFC.BIT.rg_cnt_refc = dutyCnt; + aptx->TC_REFD.BIT.rg_cnt_refd = dutyCnt; + } +} + +/** + * @brief Check systerm cmd start signal. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckSysCmdStart(MtrCtrlHandle *mtrCtrl, APT_RegStruct **aptAddr, SysStatusReg *statusReg, + FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check start cmd */ + if (SysGetCmdStart(statusReg)) { + SysRunningSet(statusReg); + SysCmdStartClr(statusReg); + mtrCtrl->sysTickCnt = 0; + *stateMachine = FSM_CAP_CHARGE; + /* Preparation for charging the bootstrap capacitor. */ + AptTurnOnLowSidePwm(aptAddr, mtrCtrl->aptMaxcntCmp); + /* Out put pwm */ + MotorPwmOutputEnable(aptAddr); + } +} + +/** + * @brief Clear historical values of all controller before start-up. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ClearBeforeStartup(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->aptMaxcntCmp = g_apt0.waveform.timerPeriod; + + /* Clear bemf parameters. */ + mtrCtrl->bemf.u = 0; + mtrCtrl->bemf.v = 0; + mtrCtrl->bemf.w = 0; + + /* Clear tickcnt. */ + mtrCtrl->msTickCnt = 0; + + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + + /* Clear spd parameters. */ + mtrCtrl->spdEstHz = 0; + mtrCtrl->spdRefHz = 0; + + mtrCtrl->stepCtrl.phaseStep = STEP1; + + mtrCtrl->sysTickCnt = 0; + + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + mtrCtrl->sysVar.changePhaseFlag = 0; + mtrCtrl->sysVar.firstEventFilterFlag = 0; + mtrCtrl->sysVar.stepTimeNum = 0; + mtrCtrl->sysVar.stepTimeFilterEnable = 0; + for (int i = 0; i < STEP_MAX_NUM; i++) { + mtrCtrl->sysVar.stepTime[i] = 0; + } + /* RMG CLEAR */ + RMG_Clear(&mtrCtrl->spdRmg); /* Clear the history value of speed slope control */ + /* SPDCTRL CLEAR */ + PID_Clear(&mtrCtrl->spdPi); +} + +/** + * @brief Check bootstrap capacitor charge time. + * @param mtrCtrl The motor control handle. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckBootstrpCapChargeTime(MtrCtrlHandle *mtrCtrl, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + mtrCtrl->sysTickCnt++; + /* check bootstrap capacitor charge time */ + if (mtrCtrl->sysTickCnt == mtrCtrl->capChargeTickNum) { + /* Update Status. */ + *stateMachine = FSM_CLEAR; + } +} + +/** + * @brief Check over current status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckOverCurrentState(SysStatusReg *statusReg, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check systerm error status */ + if (SysIsError(statusReg) == false) { + *stateMachine = FSM_IDLE; + } +} + +/** + * @brief Deceleration control phase before stop. + * @param mtrCtrl The motor control handle. + * @param statusReg Motor Control Status. + * @param targetSpd Deceleration target value. + * @param switchSpd Switch to stop state speed. + * @retval None. + */ +static void DecelerateSpeed(MtrCtrlHandle *mtrCtrl, FsmState *stateMachine, float targetSpd, float switchSpd) +{ + /* Reduce speed before stop. */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, targetSpd); + mtrCtrl->spdPi.error = mtrCtrl->spdRefHz - mtrCtrl->spdEstHz; + /* Speed loop control */ + mtrCtrl->pwmDuty = PI_Exec(&mtrCtrl->spdPi); + if (mtrCtrl->spdRefHz <= switchSpd) { /* Maximum speed for switching to the FSM_STOP state */ + *stateMachine = FSM_STOP; + } +} + +/** + * @brief System timer tick task. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void TSK_SystickIsr(MtrCtrlHandle *mtrCtrl, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + SysStatusReg *statusReg = &mtrCtrl->statusReg; + volatile FsmState *stateMachine = &mtrCtrl->stateMachine; + mtrCtrl->msTickCnt++; + /* Pre-processing of motor status. */ + MotorStatePerProc(statusReg, stateMachine); + /* statemachine */ + switch (*stateMachine) { + case FSM_IDLE: + CheckSysCmdStart(mtrCtrl, aptAddr, statusReg, (FsmState *)stateMachine); + break; + case FSM_CAP_CHARGE: + /* Bootstrap Capacitor Charging Timing */ + CheckBootstrpCapChargeTime(mtrCtrl, (FsmState *)stateMachine); + break; + case FSM_CLEAR: + /* Clearing control parameters. */ + ClearBeforeStartup(mtrCtrl); + /* Rotor alignment. */ + ForceAlign(mtrCtrl); + *stateMachine = FSM_STARTUP; + break; + case FSM_STARTUP: + /* Forced drag. */ + break; + case FSM_RUN: + /* Speed ramp control */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + mtrCtrl->spdPi.error = mtrCtrl->spdRefHz - mtrCtrl->spdEstHz; + /* Speed loop control */ + mtrCtrl->pwmDuty = PI_Exec(&mtrCtrl->spdPi); + break; + case FSM_WAIT_STOP: + /* 5.0f : maximum speed for switching to the FSM_STOP state */ + DecelerateSpeed(mtrCtrl, (FsmState *)stateMachine, 0.0f, 5.0f); + break; + case FSM_STOP: + MotorPwmOutputDisable(aptAddr); + SysRunningClr(statusReg); + *stateMachine = FSM_IDLE; + break; + case FSM_FAULT: + /* Overcurrent state */ + CheckOverCurrentState(statusReg, (FsmState *)stateMachine); + break; + default: + break; + } +} + +/** + * @brief Overcurrent protection. + * @param aptHandle The apt Handle. + * @retval None. + */ +void MotorSysErrCallback(void *aptHandle) +{ + /* Overcurrent protection callback function. */ + BASE_FUNC_UNUSED(aptHandle); + MotorPwmOutputDisable(g_aptCp); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_U], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_V], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_W], APT_OC_COMBINE_EVENT_A1); + /* Status setting error */ + SysErrorSet(&g_mc.statusReg); + DBG_PRINTF("APT error! \r\n"); + HAL_GPIO_SetValue(&g_gpio2, GPIO_PIN_3, GPIO_LOW_LEVEL); +} + +/** + * @brief Motor blockage protection function. + * @retval None. + */ +static void MotorBlockageProtect(void) +{ + unsigned int currentTick = DCL_SYSTICK_GetTick(); /* Get the current tick value. */ + unsigned int intervalTick = (currentTick >= g_mc.sysVar.lastZeroPoint) + ? currentTick - g_mc.sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - g_mc.sysVar.lastZeroPoint + currentTick + 1; + if (intervalTick > SYSTICK_GetCRGHZ()) { + MotorPwmOutputDisable(g_aptCp); + SysErrorSet(&g_mc.statusReg); + g_mc.spdEstHz = 0; + return; + } +} + +/** + * @brief Carrier Interruption. + * @param aptHandle The apt Handle. + * @retval None. + */ +void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + MCS_CarrierProcess(&g_mc); + if (g_mc.stateMachine == FSM_RUN || g_mc.stateMachine == FSM_WAIT_STOP) { + MotorBlockageProtect(); + } + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +/** + * @brief Change phase delay callback function. + * @param handle The TIMER1 Handle. + * @retval None. + */ +void MotorStatemachineCallBack(void *handle) +{ + /* TIMER1CallbackFunction */ + BASE_FUNC_UNUSED(handle); + TSK_SystickIsr(&g_mc, g_aptCp); +} + +/** + * @brief Check Potentiometer Value and adjust speed. + * @param None. + * @retval None. + */ +static void AdjustSpeedFunction(void) +{ + static unsigned int potentiomitorAdcValue = 0; + static float spdCmdHz = 0; + static float spdCmdHzLast = SDP_MAX_VALUE; + HAL_ADC_SoftTrigSample(&ADC_HANDLE, ADC_SOC_NUM9); /* Get the speed adjustment resistance. */ + potentiomitorAdcValue = HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_SOC_NUM9); + + + /* 4045.0 is adc sample max value of potentiomitor */ + // spdCmdHz = (float)potentiomitorAdcValue / 4045.0 * SDP_MAX_VALUE; + + //服务器控制开关电机 + if(strstr((const char*)esp32.ReceiveBuffer,"\"OpenMotor\":1")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + SysCmdStartSet(&g_mc.statusReg); + + DBG_PRINTF("Motor Open\r\n"); + } + + if(strstr((const char*)esp32.ReceiveBuffer,"\"OpenMotor\":0")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + + SysCmdStopSet(&g_mc.statusReg); + DBG_PRINTF("Motor close\r\n"); + } + + //服务器控制电机转速 + + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":1")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + spdCmdHz=15; + DBG_PRINTF("Level 1\r\n"); + + } + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":2")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + spdCmdHz=35; + DBG_PRINTF("Level 2\r\n"); + + } + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":3")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + spdCmdHz=55; + DBG_PRINTF("Level 3\r\n"); + + } + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":4")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + spdCmdHz=75; + DBG_PRINTF("Level 4\r\n"); + + } + + + if (spdCmdHz < SDP_MIN_VALUE) { /* Speed protection. */ + spdCmdHz = SDP_MIN_VALUE; + } + if (spdCmdHz > SDP_MAX_VALUE) { + spdCmdHz = SDP_MAX_VALUE; + } + float delta = spdCmdHzLast > spdCmdHz ? (spdCmdHzLast - spdCmdHz) : (spdCmdHz - spdCmdHzLast); + /* 1.0 : If the speed fluctuation is less than 1.0Hz, no change is made. */ + if (delta < 1.0) { + return; + } + spdCmdHzLast = spdCmdHz; + g_mc.spdCmdHz = spdCmdHz; + + ESP32_DatatoServer((u8 *)"Speed",g_mc.spdCmdHz); +} + +/** + * @brief Config the KEY func. + * @param handle The GPIO handle. + * @retval None. + */ +static KEY_State Key_StateRead(GPIO_Handle *handle) +{ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + BASE_FUNC_DELAY_MS(30); /* delay 30ms for deshake */ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + while (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + } + return KEY_DOWN; + } + } + return KEY_UP; +} + +/** + * @brief Control motor start and stop state by key func. + * @param param The GPIO handle. + * @retval None. + */ +void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + if (Key_StateRead(handle) == KEY_DOWN) { + if (SysIsRunning(&g_mc.statusReg)) { /* stop apt output, motor is off status */ + SysCmdStopSet(&g_mc.statusReg); + } else { /* start apt output, motor is on status */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + SysCmdStartSet(&g_mc.statusReg); + } + } +} + +/** + * @brief User application entry. + * @retval BSP_OK. + */ +int MotorMainProcess(void) +{ + SystemInit(); + + /* WIFI INIT */ + HAL_UART_ReadIT(&g_uart3, U3RxBuffer, 1); + ESP32_Start_Connect();//开始配网 + + /* System Initialization. */ + unsigned int tickNum100Ms = 200; /* 100ms tick */ + static unsigned int tickCnt100Ms = 0; + unsigned int tickNum500Ms = 1000; /* 500ms tick */ + static unsigned int tickCnt500Ms = 0; + + HAL_TIMER_Start(&g_timer1); + /* Disable PWM output before startup. */ + MotorPwmOutputDisable(g_aptCp); + InitSoftware(); + /* Start the PWM clock. */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + + while (true) { + if (g_mc.msTickCnt - tickCnt100Ms >= tickNum100Ms) { + tickCnt100Ms = g_mc.msTickCnt; + /* User Code 100ms Event */ + AdjustSpeedFunction(); + + } + if (g_mc.msTickCnt - tickCnt500Ms >= tickNum500Ms) { + if (SysIsError(&g_mc.statusReg) == true) { + break; + } + /* The LED blinks when no status is not error. */ + HAL_GPIO_TogglePin(&SYS_LED_HANDLE, SYS_LED_PIN); + tickCnt500Ms = g_mc.msTickCnt; + } + } + return 0; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h new file mode 100644 index 00000000..a2fdeb2c --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h @@ -0,0 +1,47 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.h + * @author MCU Algorithm Team + * @brief This file provides motor sample functions declaration for ECBMCU201MPC board. + */ +#ifndef McuMagicTag_MCS_MOTOR_PROCESS_H +#define McuMagicTag_MCS_MOTOR_PROCESS_H + +#include "main.h" + +/** + * @brief phase sequence. + */ +typedef enum { + PHASE_U = 0, + PHASE_V, + PHASE_W, + PHASE_MAX_NUM +} MCS_PhaseEnum; + +/** + * @brief key state. + */ +typedef enum { + KEY_DOWN = 0, + KEY_UP = 1, +} KEY_State; + +int MotorMainProcess(void); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h new file mode 100644 index 00000000..9e940e07 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECBMCU201MPC app. + */ +#ifndef McuMagicTag_MCS_CONFIG_H +#define McuMagicTag_MCS_CONFIG_H + +#if defined(CHIP_3061MNPICA) || defined(CHIP_3061MNNICA) || defined(CHIP_3061MNPIC8) || defined(CHIP_3061MNNIC8) +#define ADC_U_SOC_NUM ADC_SOC_NUM2 +#define ADC_V_SOC_NUM ADC_SOC_NUM5 +#define ADC_W_SOC_NUM ADC_SOC_NUM6 +#define ADC_SPD_ADJ_SOC_NUM ADC_SOC_NUM9 +#define ADC_HANDLE g_adc0 +#endif + +#if defined (CHIP_3066MNPIRH) || defined (CHIP_3065PNPIRH) || defined (CHIP_3065PNPIRE) || defined (CHIP_3065PNPIRA) +#define ADC_U_SOC_NUM ADC_SOC_NUM3 +#define ADC_V_SOC_NUM ADC_SOC_NUM5 +#define ADC_W_SOC_NUM ADC_SOC_NUM7 +#define ADC_SPD_ADJ_SOC_NUM ADC_SOC_NUM9 + +#define ADC_HANDLE g_adc2 +#endif + +#define APT_PWM_FREQ 12000 /* PWM frequency 12K Hz. */ +#define CTRL_CURR_PERIOD (1.0f / APT_PWM_FREQ) /* carrier ISR period (S) */ +#define CTRL_CURE_PERIOD_US 83 + +#define SYSTICK_PERIOD_US 500u /* systick period. unit : us */ + +#define INV_CAP_CHARGE_MS 3u /* Bootstrap capacitor charge time. unit : ms */ + +#define CTRL_SYSTICK_PERIOD 0.0005f /* systick control period, 500us */ + +#define USER_SPD_SLOPE 60.0f /* slope of velocity change */ + +#define IN_VOLTAGE_BUS 24 /* Motor input voltage */ +#define POLES 21 /* logarithm of motor pole */ +#define MATH_PI 3.14 /* Pi */ +#define MOTOR_K 0.76 /* Torque Coefficient */ + +#define RAMP_STP 60 /* Slope of forced draging acceleration */ +#define RAMP_DUTY_PWM 0.5 /* 1.0% */ + +#define FORCE_DRAG_MINDUTY 10 /* APT minimum duty cycle during forced drag */ +#define FORCE_DRAG_MAXDUTY 15 /* APT maximum duty cycle during forced drag */ + +#define DRAG_START_INTERVAL 1000 /* Force drag change phase time */ +#define DRAG_STOP_INTERVAL 400 /* Force drag change phase time */ + +/* Parameters of the motor in the RUN */ +#define FILTER_COUNT 3 /* Filter Times */ +#define PHASE_OFFSET 9000 /* Phase delay due to filtering */ + +#define APT_DUTYLIMIT_MAX 99.9 /* Maximum duty cycle of the output APT */ +#define APT_DUTYLIMIT_MIN 8.0 /* Minimum duty cycle of the output APT */ + +#define BRIDGE_CTR_APT_U APT0 /* APT address that controls the U phase */ +#define BRIDGE_CTR_APT_V APT1 /* APT address that controls the V phase */ +#define BRIDGE_CTR_APT_W APT2 /* APT address that controls the W phase */ + +#define SDP_MAX_VALUE 78.00 /* Maximum change phase frequency */ +#define SDP_MIN_VALUE 15.0 /* Minimum change phase frequency */ +#define SDP_TARGET_VALUE 78.00 /* Target change phase frequency */ + +/* SPD PID Param */ +#define SPD_PID_KP 0.9 /* P parameter of PID control */ +#define SPD_PID_KI 40 /* I parameter of PID control */ +#define SPD_PID_TS 0.0005 /* TS parameter of PID control cycle */ + +#define OP_TO_CL_INTERGRAL 8.0 /* Open-loop switching closed-loop integral term to prevent sudden current change. */ + +#define VOL_DIVIDER_COEFFICIENT 0.09091f /* Division coefficient of the zero-crossing detection sampling circuit */ + +#define SPD_FILTER_FC 30 + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c new file mode 100644 index 00000000..7779fbef --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c @@ -0,0 +1,224 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.c + * @author MCU Algorithm Team + * @brief This file provides carrier interrupt application for motor control. + */ + +#include "mcs_carrier.h" +#include "mcs_user_config.h" +#include "mcs_assert.h" +#include "debug.h" + +#define S_TO_US 1000000 +#define S_TO_SYSTICK 100000000 + +/** + * @brief Sets the duty cycle of the H-bridge APT. + * @param aptHandle APT module handle. + * @param duty PWM duty. Range: 0.1 ~ 99.9. + * @retval None. + */ +void MCS_SetCtrAptDuty(MtrCtrlHandle *mtrCtrl, unsigned int duty) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(duty > 0); + /* Set pwm duty of uvw pahse */ + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.u, duty); + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.v, duty); + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.w, duty); +} + +/** + * @brief Strong drag start. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ForceDragAcc(MtrCtrlHandle *mtrCtrl) +{ + /* Verifying Parameters. */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + unsigned int voltageDValue; + unsigned int dragChangeFreq; + unsigned int timerperiod; + unsigned int freqLast; + unsigned int aptCountsOneUs; + + mtrCtrl->sysVar.accTimeCnt++; + if (mtrCtrl->sysVar.accTimeCnt < mtrCtrl->sysVar.dragChangePhaseTime) { + return; + } + + mtrCtrl->sysVar.accTimeCnt = 0; + /* Step 1: Calculate the voltage difference. */ + voltageDValue = IN_VOLTAGE_BUS * RAMP_DUTY_PWM; + /* Step 2: Calculate the commutation frequency. */ + freqLast = S_TO_US / (mtrCtrl->sysVar.dragChangePhaseTime * CTRL_CURE_PERIOD_US); + dragChangeFreq = voltageDValue * STEP_MAX_NUM * POLES / (MOTOR_K * 2 * MATH_PI) + freqLast; /* 2*PI = 360° */ + /* Step 3: Convert the commutation frequency to the commutation count value. */ + timerperiod = mtrCtrl->stepCtrl.controlApt.u->waveform.timerPeriod * CTRL_CURE_PERIOD_US; + mtrCtrl->sysVar.dragChangePhaseTime = S_TO_US / (timerperiod * dragChangeFreq); + + /* Determine whether the change phase speed has reached the speed of stopping forced drag. */ + if (mtrCtrl->sysVar.dragChangePhaseTime < DRAG_STOP_INTERVAL) { + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_STOP_INTERVAL; + mtrCtrl->sysVar.accTimeCnt = 0; + mtrCtrl->sysVar.bemfFilterCnt = 0; + mtrCtrl->stateMachine = FSM_RUN; + mtrCtrl->sysVar.lastZeroPoint = DCL_SYSTICK_GetTick(); + mtrCtrl->spdPi.integral = OP_TO_CL_INTERGRAL; + } + + /* Shorten the time interval of forced drag change phase. */ + mtrCtrl->pwmDuty += RAMP_DUTY_PWM; + aptCountsOneUs = HAL_CRG_GetIpFreq(APT0_BASE) / S_TO_US; + mtrCtrl->sysVar.waitTime = (mtrCtrl->sysVar.dragChangePhaseTime * CTRL_CURE_PERIOD_US * aptCountsOneUs) >> 1; + /* Change phase time is 2 the waiting time. */ + mtrCtrl->spdRefHz = (float)(HAL_CRG_GetIpFreq(SYSTICK_BASE) / (mtrCtrl->sysVar.waitTime * 2)) / STEP_MAX_NUM; + mtrCtrl->spdEstHz = mtrCtrl->spdRefHz; + mtrCtrl->spdRmg.yLast = mtrCtrl->spdRefHz; + mtrCtrl->stepCtrl.phaseStep = (mtrCtrl->stepCtrl.phaseStep + 1) % STEP_MAX_NUM; + SixStepPwm(&mtrCtrl->stepCtrl); + /* Limiting the PWM Duty Cycle Range. */ + if (mtrCtrl->pwmDuty > FORCE_DRAG_MAXDUTY) { + mtrCtrl->pwmDuty = FORCE_DRAG_MAXDUTY; + } + if (mtrCtrl->pwmDuty < FORCE_DRAG_MINDUTY) { + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + } + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); +} + +/** + * @brief Zero-crossing filter. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void BemfZeroSampleFilter(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysVar.bemfFilterCnt++; + /* Filter the number of samples. */ + if (mtrCtrl->sysVar.bemfFilterCnt >= FILTER_COUNT) { + mtrCtrl->sysVar.bemfFilterCnt = 0; + unsigned int currentTick = DCL_SYSTICK_GetTick(); + if (mtrCtrl->sysVar.firstEventFilterFlag == 0) { + mtrCtrl->sysVar.lastZeroPoint = currentTick; + mtrCtrl->sysVar.changePhaseFlag = 1; + mtrCtrl->sysVar.firstEventFilterFlag = 1; + return; + } + /* Calculate the time interval between the last zero crossing. */ + mtrCtrl->sysVar.stepTime[mtrCtrl->stepCtrl.phaseStep] = currentTick >= mtrCtrl->sysVar.lastZeroPoint + ? currentTick - mtrCtrl->sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - mtrCtrl->sysVar.lastZeroPoint + currentTick + 1; + mtrCtrl->sysVar.stepTimeNum++; + /* Wait time is half the interval. */ + mtrCtrl->sysVar.waitTime = mtrCtrl->sysVar.stepTime[mtrCtrl->stepCtrl.phaseStep] >> 1; + mtrCtrl->sysVar.waitTime -= PHASE_OFFSET; + mtrCtrl->sysVar.lastZeroPoint = currentTick; + /* Update flag. */ + mtrCtrl->sysVar.changePhaseFlag = 1; + } +} + +/** + * @brief Back EMF zero crossing check. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void BemfZeroCheck(MtrCtrlHandle *mtrCtrl) +{ + /* The step corresponds to different conditional judgments. */ + unsigned int bemfCheckTable[STEP_MAX_NUM] = {mtrCtrl->bemf.w < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.v > mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.u < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.w > mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.v < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.u > mtrCtrl->zeroPoint ? 1 : 0}; + + if (bemfCheckTable[mtrCtrl->stepCtrl.phaseStep] == 1) { + BemfZeroSampleFilter(mtrCtrl); + } +} + +/** + * @brief Change phase and speed estimation. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ChangePhase(MtrCtrlHandle *mtrCtrl) +{ + unsigned int currentTick = DCL_SYSTICK_GetTick(); /* Get the current tick value. */ + unsigned int intervalTick = (currentTick >= mtrCtrl->sysVar.lastZeroPoint) + ? currentTick - mtrCtrl->sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - mtrCtrl->sysVar.lastZeroPoint + currentTick + 1; + /* Start average filtering when the number of recorded data reaches six. */ + if (mtrCtrl->sysVar.stepTimeNum >= STEP_MAX_NUM) { + mtrCtrl->sysVar.stepTimeNum = 0; + mtrCtrl->sysVar.stepTimeFilterEnable = 1; + } + /* If the accumulated time is greater than the waiting commutation time, commutation is performed. */ + if (intervalTick > mtrCtrl->sysVar.waitTime) { + if (mtrCtrl->sysVar.stepTimeFilterEnable) { /* 6-step commutation time averaging if filtering is enabled. */ + unsigned int totalTime = mtrCtrl->sysVar.stepTime[STEP1] + mtrCtrl->sysVar.stepTime[STEP2] + + mtrCtrl->sysVar.stepTime[STEP3] + mtrCtrl->sysVar.stepTime[STEP4] + + mtrCtrl->sysVar.stepTime[STEP5] + mtrCtrl->sysVar.stepTime[STEP6]; + mtrCtrl->spdEstHz = (float)HAL_CRG_GetIpFreq(SYSTICK_BASE) / totalTime; + } else { + mtrCtrl->spdEstHz = (float)HAL_CRG_GetIpFreq(SYSTICK_BASE) / (mtrCtrl->sysVar.waitTime << 1) / STEP_MAX_NUM; + } + /* Change phase. */ + mtrCtrl->stepCtrl.phaseStep = (mtrCtrl->stepCtrl.phaseStep + 1) % STEP_MAX_NUM; + SixStepPwm(&mtrCtrl->stepCtrl); + mtrCtrl->sysVar.changePhaseFlag = 0; + } +} + +/** + * @brief Zero-crossing detection and change phase + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void MCS_CarrierProcess(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* Offset value of the calibration value of the three-phase current */ + + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + ForceDragAcc(mtrCtrl); /* Forced drag. */ + break; + + case FSM_RUN: + case FSM_WAIT_STOP: + mtrCtrl->readBemfUVW(&mtrCtrl->bemf); + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); + if (mtrCtrl->sysVar.changePhaseFlag) { + /* Change phase process. */ + ChangePhase(mtrCtrl); + } else { + /* Zero-crossing detection procedure. */ + BemfZeroCheck(mtrCtrl); + } + break; + + default: + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h new file mode 100644 index 00000000..05fc2666 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h @@ -0,0 +1,91 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration for carrier interrupt processing function. + */ +#ifndef McuMagicTag_MCS_CARRIER_H +#define McuMagicTag_MCS_CARRIER_H + +#include "mcs_status.h" +#include "mcs_six_step.h" +#include "mcs_ramp_mgmt.h" +#include "mcs_spd_ctrl.h" +#include "mcs_fsm.h" + +/** + * @brief Three-phase static coordinate frame variable. + */ +typedef struct { + unsigned int u; /**< Component u of the three-phase static coordinate frame variable. */ + unsigned int v; /**< Component v of the three-phase static coordinate frame variable. */ + unsigned int w; /**< Component w of the three-phase static coordinate frame variable. */ +} UVWBemf; + +typedef void (*ReadBemf)(UVWBemf *bemfUVW); + +/** + * @brief The definition of the systematic global variables + */ +typedef struct { + unsigned char changePhaseFlag; /**< Flag indicating that delay change phase is required */ + unsigned char firstEventFilterFlag; /**< First zero-crossing event filtering flag. */ + unsigned int dragChangePhaseTime; /**< Interval for forced drag acceleration */ + unsigned int accTimeCnt; /**< Acceleration time count */ + + unsigned int bemfFilterCnt; /**< Number of sample filtering times for zero-crossing detection. */ + + unsigned int lastZeroPoint; /**< Time of the last zero point */ + unsigned int waitTime; /**< Time to wait for change phase */ + unsigned int stepTime[STEP_MAX_NUM]; /**< Record the time spent on each step */ + unsigned int stepTimeNum; /**< Number of data records in the steptime array. */ + unsigned int stepTimeFilterEnable; +} SysVariable; + +typedef struct { + volatile float spdCmdHz; /**< Set target change phase frequency */ + float spdRefHz; /**< Command values after speed ramp management */ + float spdEstHz; /**< Actual change phase frequency of feedback */ + float pwmDuty; /**< APT duty cycle */ + unsigned int zeroPoint; /**< Adc value of zero point */ + + unsigned short aptMaxcntCmp; /**< Apt Maximum Comparison Count */ + + unsigned short sysTickCnt; /**< System Timer Tick Count */ + unsigned short capChargeTickNum; /**< Bootstrap Capacitor Charge Tick Count */ + unsigned short msTickNum; /**< Number of ticks corresponding to 1 ms */ + volatile unsigned int msTickCnt; /**< Millisecond-level counter, which can be used in 1-ms and 5-ms tasks. */ + + RMG_Handle spdRmg; /**< Ramp management struct for the speed controller input reference */ + PID_Handle spdPi; /**< PI controller struct in the speed controller. */ + + UVWBemf bemf; /**< Three-phase back electromotive force */ + SixStepHandle stepCtrl; /**< Control structure of six-step square wave */ + + SysVariable sysVar; /**< System Variables */ + SysStatusReg statusReg; /**< System Status */ + FsmState stateMachine; /**< BLDC Motor Control State Machine */ + + ReadBemf readBemfUVW; /**< Function interface for obtaining the three-phase electromotive force */ +} MtrCtrlHandle; + +void MCS_CarrierProcess(MtrCtrlHandle *mtrCtrl); + +void MCS_SetCtrAptDuty(MtrCtrlHandle *mtrCtrl, unsigned int duty); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h new file mode 100644 index 00000000..b3c79ea2 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h @@ -0,0 +1,55 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_fsm.h + * @author MCU Algorithm Team + * @brief This file provides the definition of finite statemachine (FSM). + */ + +#ifndef McuMagicTag_MCS_FSM_H +#define McuMagicTag_MCS_FSM_H + +/** + * @brief motor control FSM state define. + * @details motor control FSM state type: + * + FSM_IDLE -- IDLE state, system startup default. + * + FSM_OFFSET_CALIB -- Self calibrate, for ADC init. + * + FSM_CAP_CHARGE -- IPM cap charge. + * + FSM_CLEAR -- Clear before every run. + * + FSM_LOCATE -- Rotor position pre-locate. + * + FSM_STARTUP -- Start up. + * + FSM_SWITCH -- Transition state, control from open to closed loop. + * + FSM_RUN -- Normal running state. + * + FSM_WAIT_STOP -- Wait stopping. + * + FSM_STOP -- Normal stop. + * + FSM_FAULT -- Fault state, waiting for user process. + */ +typedef enum { + FSM_IDLE = 0, + FSM_OFFSET_CALIB, + FSM_CAP_CHARGE, + FSM_CLEAR, + FSM_LOCATE, + FSM_STARTUP, + FSM_SWITCH, + FSM_RUN, + FSM_WAIT_STOP, + FSM_STOP, + FSM_FAULT +} FsmState; + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c new file mode 100644 index 00000000..c86e609c --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c @@ -0,0 +1,126 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_six_step.c + * @author MCU Algorithm Team + * @brief This file provides functions to control the H bridge. + */ + +#include "mcs_assert.h" +#include "mcs_six_step.h" + +/* Mode for disabling or enabling software-based forced output */ +#define APT_PWM_MODE 0 +#define APT_FRC_MODE 1 + +#define PWM_SIGNAL 1 + +#define FRC_LOW APT_OUT_CTRL_ACTION_LOW +#define FRC_HIGH APT_OUT_CTRL_ACTION_HIGH + +/** + * @brief Force PWM output by APT + * @param APTx The APT to use + * @param PwmAout Force to be high or low + * @param PwmAenble PWMA signal software force mode + * @param PwmBout Force to be high or low + * @param PwmBenble PWMB signal software force mode + */ +static void APT_ForcePwmByApt(APT_RegStruct *aptx, APT_Act actMode) +{ + MCS_ASSERT_PARAM(aptx != NULL); + switch (actMode) { + case APT_CHA_PWM_CHB_LOW: + /* Channel A: 0 means not force output enable, channel A output PWM. */ + DCL_APT_DisableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + /* Channel B: 2 means channel B force output LOW due to the A_H_B_L invert. */ + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_HIGH); + break; + case APT_CHA_LOW_CHB_HIGH: + /* Channel A: 1 means force output enable. */ + /* Channel A: 1 means channel A force output LOW. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + /* Channel B: 2 means channel B force output HIGH. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_HIGH); + break; + case APT_CHA_LOW_CHB_LOW: + /* Channel A: 1 means force output enable. */ + /* Channel A: 1 means channel A force output LOW. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + /* Channel B: 1 means channel A force output HIGH due to the A_H_B_L invert. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_LOW); + break; + default: + break; + } +} + +/** + * @brief Output six-step square wave. + * @param handle The SixStepHandle. + * @retval None. + */ +void SixStepPwm(const SixStepHandle *handle) +{ + MCS_ASSERT_PARAM(handle != NULL); + APT_RegStruct *aptU = handle->controlApt.u->baseAddress; /* Get apt u\v\w baseaddress. */ + APT_RegStruct *aptV = handle->controlApt.v->baseAddress; + APT_RegStruct *aptW = handle->controlApt.w->baseAddress; + switch (handle->phaseStep) { + case STEP1: /* U+, V- */ + APT_ForcePwmByApt(aptU, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_HIGH); + break; + case STEP2: /* U+, W- */ + APT_ForcePwmByApt(aptU, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_LOW); + break; + case STEP3: /* V+, W- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptV, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_LOW); + break; + case STEP4: /* V+, U- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_HIGH); + break; + case STEP5: /* W+, U- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptW, APT_CHA_PWM_CHB_LOW); + break; + case STEP6: /* W+, V- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_PWM_CHB_LOW); + break; + default: + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h new file mode 100644 index 00000000..08198c4c --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h @@ -0,0 +1,79 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_six_step.c + * @author MCU Algorithm Team + * @brief The header file contains the following declaration: + * + StepEnum enum definition. + * + PhaseEnum enum definition. + * + UVW_AptReg structure definition. + * + SixStepHandle handle structure definition. + * + AptOutCombination structure definition. + * + Six Step Pwm Function And Six Step Pwm Overlap Function. + */ + +#ifndef MCS_SIX_STEP_H +#define MCS_SIX_STEP_H + +#include "apt.h" + +typedef enum { + STEP1 = 0, + STEP2, + STEP3, + STEP4, + STEP5, + STEP6, + STEP_MAX_NUM +} StepEnum; + +typedef enum { + U = 0, + V, + W, + PHASE_MAX_NUMS +} PhaseEnum; + +typedef enum { + APT_CHA_PWM_CHB_LOW, + APT_CHA_LOW_CHB_HIGH, + APT_CHA_LOW_CHB_LOW +} APT_Act; + +/** + * @brief Three-phase static coordinate frame variable. + */ +typedef struct { + APT_Handle *u; /**< Apt handle for controlling phase U. */ + APT_Handle *v; /**< Apt handle for controlling phase V. */ + APT_Handle *w; /**< Apt handle for controlling phase W. */ +} UVW_AptReg; + +typedef struct { + unsigned char phaseStep; /* Current step. */ + UVW_AptReg controlApt; /* Apt handles for controlling H bridge. */ +} SixStepHandle; + +typedef struct { + unsigned int upperout; /* High tube level */ + unsigned int upperstate; /* High tube state */ + unsigned int lowerout; /* Low tube level */ + unsigned int lowerstate; /* Low tube state */ +} AptOutCombination; + +void SixStepPwm(const SixStepHandle *handle); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h new file mode 100644 index 00000000..d92ed312 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h @@ -0,0 +1,188 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_status.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_STATUS_H +#define McuMagicTag_MCS_STATUS_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "typedefs.h" +#include "mcs_assert.h" + +/* Typedef definitions ------------------------------------------------------------------------- */ +/** + * @brief System status define + */ +typedef union { + unsigned short all; + struct { + unsigned short cmdStart : 1; /**< Indicates that a start system command has been received. */ + unsigned short cmdStop : 1; /**< Indicates that a stop system command has been received. */ + unsigned short isRunning : 1; /**< Indicates that the system is running (enable signal) */ + unsigned short sysError : 1; /**< Indicates that the system reports an error. */ + unsigned short poweron : 1; /**< Indicates that the power-on initialization phase is complete. */ + unsigned short capcharge : 1; /**< Indicates that the bootstrap capacitor charging phase is complete. */ + unsigned short adczero : 1; /**< The current sampling point is reset to zero after power-on. */ + } BIT; +} SysStatusReg; + +/** + * @brief Get status of BIT cmdStart. + * @param sysStatus System status register handle. + * @retval Status of BIT cmdStart. + */ +static inline bool SysGetCmdStart(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.cmdStart == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT cmdStart. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStartSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStart = 1; +} + +/** + * @brief Clear BIT cmdStart. + * @param handle System status register handle. + * @retval None. + */ +static inline void SysCmdStartClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStart = 0; +} + +/** + * @brief Get status of BIT cmdStop. + * @param sysStatus System status register handle. + * @retval Status of BIT cmdStart. + */ +static inline bool SysGetCmdStop(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.cmdStop == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStop = 1; +} + +/** + * @brief Clear BIT cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStop = 0; +} + +/** + * @brief Get status of BIT isRunning. + * @param sysStatus System status register handle. + * @retval Status of BIT isRunning. + */ +static inline bool SysIsRunning(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.isRunning == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.isRunning = 1; +} + +/** + * @brief Clear BIT isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.isRunning = 0; +} + +/** + * @brief Get status of BIT sysError. + * @param sysStatus System status register handle. + * @retval Status of BIT sysError. + */ +static inline bool SysIsError(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.sysError == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.sysError = 1; +} + +/** + * @brief Clear BIT sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.sysError = 0; +} + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/readme.md b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/readme.md new file mode 100644 index 00000000..2e0a0107 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/mcs_sensorless_bldc_six_step_wave/readme.md @@ -0,0 +1,13 @@ +# Bldc_Sensorless_Six_Step_Wave + +**【功能描述】** ++ 基于反电动势采样的无感电机六步方波调速系统应用 + +**【环境要求】** ++ 所用单板电源为12V低压,电机选用GBM2804H-100T云台电机 + +**【IDE配置方法】** ++ chipConfig中的sample栏目里面选中Bldc Sensorless Six Step Wave示例,然后点击生成代码即可 + +**【注意事项】** ++ 供电电源12V \ No newline at end of file diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/MQTT.c b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/MQTT.c new file mode 100644 index 00000000..41e4a650 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/MQTT.c @@ -0,0 +1,397 @@ + +/* +**************************************************************************************** +* INCLUDES (头文件包含) +**************************************************************************************** +*/ +#include "MQTT.h" +#include "string.h" + +u8 txbuf[256]={0}; +u8 rxbuf[256]={0}; + + +//连接成功服务器回应 20 02 00 00 +//客户端主动断开连接 e0 00 +const u8 parket_connetAck[] = {0x20,0x02,0x00,0x00};//由于在接收字符时,当我接收到'\0'就转变成' '来存储,所以接收到的回应则是0x20 02 0x20 0x20 +const u8 parket_disconnet[] = {0xe0,0x00}; +const u8 parket_subAck[] = {0x90,0x03}; +const u8 parket_heart[] = {0xc0,0x00}; +const u8 parket_heart_reply[] = {0xd0,0x00};//由于在接收字符时,当我接收到'\0'就转变成' '来存储,所以接收到的回应则是0xd0 0x20 + + +/* +**************************************************************************************** +* LOCAL FUNCTIONS DECLARE (静态函数声明) +**************************************************************************************** +*/ +static void Init(u8 *prx,u16 rxlen,u8 *ptx,u16 txlen); +static u8 Connect(char *ClientID,char *Username,char *Password); +static void Disconnect(void); +static u8 SubscribeTopic(char *topic,u8 qos,u8 whether); +static u8 PublishData(char *topic, char *message, u8 qos); +static void SentHeart(void); +static void SendData(u8* p,u16 len); + +/* +**************************************************************************************** +* LOCAL FUNCTIONS (静态函数) +**************************************************************************************** +*/ +_typdef_mqtt _mqtt = +{ + 0,0, + 0,0, + Init, + Connect, + Disconnect, + SubscribeTopic, + PublishData, + SentHeart, + SendData, +}; + + +static u8 BYTE1(int num) +{ + return (u8)((num&0xFF00)>>8); +} +static u8 BYTE0(int num) +{ + return (u8)(num&0xFF); +} + +/* +**************************************************************************************** +* Function: Init +* Description: MQTT初始化 +* Input: None +* Output: None +* Return: None +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static void Init(u8 *prx,u16 rxlen,u8 *ptx,u16 txlen) +{ + _mqtt.rxbuf = prx;_mqtt.rxlen = rxlen; + _mqtt.txbuf = ptx;_mqtt.txlen = txlen; + +// memset(_mqtt.rxbuf,0,_mqtt.rxlen); +// memset(_mqtt.txbuf,0,_mqtt.txlen); +// +// //无条件先主动断开,发送4次,保证能断开 +// _mqtt.Disconnect();BASE_FUNC_DelayMs(100); +// _mqtt.Disconnect();BASE_FUNC_DelayMs(100); +// _mqtt.Disconnect();BASE_FUNC_DelayMs(100); +// _mqtt.Disconnect();BASE_FUNC_DelayMs(100); +} + +/* +**************************************************************************************** +* Function: Connect +* Description: 连接服务器的打包函数 +* Input: ClientID:客户端标识符 + Username:用户名 + Password:密码 +* Output: None +* Return: 1成功 0失败 +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static __UINT8_TYPE__ Connect(char *ClientID,char *Username,char *Password) +{ + int ClientIDLen = strlen(ClientID); + int UsernameLen = strlen(Username); + int PasswordLen = strlen(Password); + int DataLen; + _mqtt.txlen=0; + //Variable Header(可变报头)+Payload(有效负荷) 每个字段包含两个字节的长度标识 + DataLen = 10 + (ClientIDLen+2) + (UsernameLen+2) + (PasswordLen+2); + + //固定报头 + //控制报文类型 + _mqtt.txbuf[_mqtt.txlen++] = 0x10; //MQTT Message Type CONNECT + //剩余长度(不包括固定头部) + do + { + u8 encodedByte = DataLen % 128; + DataLen = DataLen / 128; + // if there are more data to encode, set the top bit of this byte + if ( DataLen > 0 ) + encodedByte = encodedByte | 128; + _mqtt.txbuf[_mqtt.txlen++] = encodedByte; + }while ( DataLen > 0 ); + + //可变报头 + //协议名 + _mqtt.txbuf[_mqtt.txlen++] = 0; // Protocol Name Length MSB + _mqtt.txbuf[_mqtt.txlen++] = 4; // Protocol Name Length LSB + _mqtt.txbuf[_mqtt.txlen++] = 'M'; // ASCII Code for M + _mqtt.txbuf[_mqtt.txlen++] = 'Q'; // ASCII Code for Q + _mqtt.txbuf[_mqtt.txlen++] = 'T'; // ASCII Code for T + _mqtt.txbuf[_mqtt.txlen++] = 'T'; // ASCII Code for T + //协议级别 + _mqtt.txbuf[_mqtt.txlen++] = 4; // MQTT Protocol version = 4 + //连接标志 + _mqtt.txbuf[_mqtt.txlen++] = 0xc2; // conn flags + //心跳间隔时间 + _mqtt.txbuf[_mqtt.txlen++] = 0x01; // Keep-alive Time Length MSB + _mqtt.txbuf[_mqtt.txlen++] = 0xF4; // Keep-alive Time Length LSB 500S心跳包 + + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(ClientIDLen);// Client ID length MSB + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(ClientIDLen);// Client ID length LSB + memcpy(&_mqtt.txbuf[_mqtt.txlen],ClientID,ClientIDLen); + _mqtt.txlen += ClientIDLen; + + if(UsernameLen > 0) + { + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(UsernameLen); //username length MSB + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(UsernameLen); //username length LSB + memcpy(&_mqtt.txbuf[_mqtt.txlen],Username,UsernameLen); + _mqtt.txlen += UsernameLen; + } + + if(PasswordLen > 0) + { + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(PasswordLen); //password length MSB + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(PasswordLen); //password length LSB + memcpy(&_mqtt.txbuf[_mqtt.txlen],Password,PasswordLen); + _mqtt.txlen += PasswordLen; + } + + //printf("%s",_mqtt.txbuf); + _mqtt.SendData(_mqtt.txbuf,_mqtt.txlen); + + u16 time=0; + while(!esp32.tc_flag)//等待传输完成标志 + { + BASE_FUNC_DelayMs(1); + if(++time>500) //超时 + break; + } + if(esp32.tc_flag) + { + esp32.tc_flag=0;//清标志 + //if(rxbuf[0]==parket_connetAck[0] && rxbuf[1]==parket_connetAck[1]) //连接成功 + if(esp32.ReceiveBuffer[0]==parket_connetAck[0] && esp32.ReceiveBuffer[1]==parket_connetAck[1]) //连接成功 + { + return 1;//连接成功 + } + } + + return 0; + + +} + +/* +**************************************************************************************** +* Function: SubscribeTopic +* Description: MQTT订阅/取消订阅数据打包并发送 +* Input: topic 主题 + qos 消息等级 + 0:最多一次,即:<=1 + 1:至少一次,即:>=1 + 2:一次,即:=1 + whether 1订阅/0取消订阅请求包 +* Output: None +* Return: 1成功 0失败 +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static u8 SubscribeTopic(char *topic,u8 qos,u8 whether) +{ + _mqtt.txlen=0; + int topiclen = strlen(topic); + + int DataLen = 2 + (topiclen+2) + (whether?1:0);//可变报头的长度(2字节)加上有效载荷的长度 + //固定报头 + //控制报文类型 + if(whether) _mqtt.txbuf[_mqtt.txlen++] = 0x82; //消息类型和标志订阅 + else _mqtt.txbuf[_mqtt.txlen++] = 0xA2; //取消订阅 + + //剩余长度 + do + { + u8 encodedByte = DataLen % 128; + DataLen = DataLen / 128; + // if there are more data to encode, set the top bit of this byte + if ( DataLen > 0 ) + encodedByte = encodedByte | 128; + _mqtt.txbuf[_mqtt.txlen++] = encodedByte; + }while ( DataLen > 0 ); + + //可变报头 + _mqtt.txbuf[_mqtt.txlen++] = 0; //消息标识符 MSB + _mqtt.txbuf[_mqtt.txlen++] = 0x01; //消息标识符 LSB + //有效载荷 + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(topiclen);//主题长度 MSB + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(topiclen);//主题长度 LSB + memcpy(&_mqtt.txbuf[_mqtt.txlen],topic,topiclen); + _mqtt.txlen += topiclen; + + if(whether) + { + _mqtt.txbuf[_mqtt.txlen++] = qos;//QoS级别 + } + + _mqtt.SendData(_mqtt.txbuf,_mqtt.txlen); + + u16 time=0; + while(!esp32.tc_flag)//等待传输完成标志 + { + BASE_FUNC_DelayMs(1); + if(++time>500) //超时 + break; + + } + if(esp32.tc_flag) + { + esp32.tc_flag=0;//清标志 + //if(_mqtt.rxbuf[0]==parket_subAck[0] && _mqtt.rxbuf[1]==parket_subAck[1]) //订阅成功 + if(esp32.ReceiveBuffer[0]==parket_subAck[0] && esp32.ReceiveBuffer[1]==parket_subAck[1]) //订阅成功 + { + return 1;//订阅成功 + } + } + + return 0; + +} + +/* +**************************************************************************************** +* Function: PublishData +* Description: MQTT发布数据打包并发送 +* Input: topic 主题 + message 消息 + qos 消息等级 +* Output: None +* Return: 数据包长度 +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static __UINT8_TYPE__ PublishData(char *topic, char *message, __UINT8_TYPE__ qos) +{ + int topicLength = strlen(topic); + int messageLength = strlen(message); + static u16 id=0; + int DataLen; + _mqtt.txlen=0; + //有效载荷的长度这样计算:用固定报头中的剩余长度字段的值减去可变报头的长度 + //QOS为0时没有标识符 + //数据长度 主题名 报文标识符 有效载荷 + if(qos) DataLen = (2+topicLength) + 2 + messageLength; + else DataLen = (2+topicLength) + messageLength; + + //固定报头 + //控制报文类型 + _mqtt.txbuf[_mqtt.txlen++] = 0x30; // MQTT Message Type PUBLISH + + //剩余长度 + do + { + u8 encodedByte = DataLen % 128; + DataLen = DataLen / 128; + // if there are more data to encode, set the top bit of this byte + if ( DataLen > 0 ) + encodedByte = encodedByte | 128; + _mqtt.txbuf[_mqtt.txlen++] = encodedByte; + }while ( DataLen > 0 ); + + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(topicLength);//主题长度MSB + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(topicLength);//主题长度LSB + memcpy(&_mqtt.txbuf[_mqtt.txlen],topic,topicLength);//拷贝主题 + _mqtt.txlen += topicLength; + + //报文标识符 + if(qos) + { + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(id); + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(id); + id++; + } + memcpy(&_mqtt.txbuf[_mqtt.txlen],message,messageLength); + _mqtt.txlen += messageLength; + + _mqtt.SendData(_mqtt.txbuf,_mqtt.txlen); + return _mqtt.txlen; +} + +/* +**************************************************************************************** +* Function: SentHeart +* Description: 发送心跳 +* Input: None +* Output: None +* Return: None +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static void SentHeart(void) +{ + _mqtt.SendData((u8 *)parket_heart,sizeof(parket_heart)); +} + +/* +**************************************************************************************** +* Function: Disconnect +* Description: 发送Disconnect报文 +* Input: None +* Output: None +* Return: None +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static void Disconnect(void) +{ + _mqtt.SendData((u8 *)parket_disconnet,sizeof(parket_disconnet)); +} + +/* +**************************************************************************************** +* Function: SendData +* Description: 函数功能:MQTT数据包发送函数 +* Input: p指向待发送的数据包,数据包数据长度 +* Output: None +* Return: None +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static void SendData(u8* p,u16 len) +{ + while(len--) + { + while(UART3->UART_FR.BIT.txff == 1); //等待发送缓冲区为空 + UART3->UART_DR.BIT.data=*p; + p++; + } +} +/* +**************************************************************************************** +* PUBLIC FUNCTIONS (全局函数) +**************************************************************************************** +*/ + + diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/MQTT.h b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/MQTT.h new file mode 100644 index 00000000..e8350034 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/MQTT.h @@ -0,0 +1,71 @@ +#ifndef _MQTT_H_ +#define _MQTT_H_ + +#ifdef __cplusplus + extern "C" { +#endif + + +/* +**************************************************************************************** +* INCLUDES (头文件包含) +**************************************************************************************** +*/ +#include "main.h" +#include "wifi.h" +/* +**************************************************************************************** +* TYPEDEFS (数据类型重定义) +**************************************************************************************** +*/ +typedef struct +{ + u8 *rxbuf;u16 rxlen; + u8 *txbuf;u16 txlen; + + void (*Init)(u8 *prx,u16 rxlen,u8 *ptx,u16 txlen); + u8 (*Connect)(char *ClientID,char *Username,char *Password); + void (*Disconnect)(void); + u8 (*SubscribeTopic)(char *topic,u8 qos,u8 whether); + u8 (*PublishData)(char *topic, char *message, u8 qos); + void (*SendHeart)(void); + void (*SendData)(u8* p,u16 len); +}_typdef_mqtt; + +/* +**************************************************************************************** +* EXTERNAL VARIABLES (外部变量) +**************************************************************************************** +*/ +extern u8 txbuf[256]; +extern u8 rxbuf[256]; +extern _typdef_mqtt _mqtt; + +/* +**************************************************************************************** +* CONSTANTS (常量) +**************************************************************************************** +*/ + + +/* +**************************************************************************************** +* MACROS (宏定义) +**************************************************************************************** +*/ + + +/* +**************************************************************************************** +* PUBLIC FUNCTIONS DECLARE (声明全局函数) +**************************************************************************************** +*/ + + + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/wifi.c b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/wifi.c new file mode 100644 index 00000000..9b0a93c9 --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/wifi.c @@ -0,0 +1,412 @@ +#include "wifi.h" +#include "string.h" +#include "debug.h" + +#include "MQTT.h" + +#include +//uart3_rx gpio1_4 --j1_34 +//uart3_tx gpio1_3 --j2_30 + + +U8 U3RxBuffer[100]; +U8 gucDecoderIndex = 0; + +ESP32_STRUCT esp32; + +/** + * @brief User-defined read completion interrupt callback function. + * @param UART_Handle UART handle. + * @retval None. + */ +void UART3_wifiReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + unsigned char data = 0; + HAL_UART_ReadIT(&g_uart3, U3RxBuffer, 1); /* Start receiving again */ + + if(U3RxBuffer[0]==0 || U3RxBuffer[0]=='\0') //遇到没数据,或者‘\0’补空格 + { + esp32.ReceiveBuffer[esp32.gucDecoderIndex++]=' '; + } + else + { + esp32.ReceiveBuffer[esp32.gucDecoderIndex++]=U3RxBuffer[0]; + } + + // FIFO 非空中断状态,状态为0则空闲 + if(UART3->UART_RIS.BIT.rxfneris ==0) + { + esp32.ReceiveBuffer[esp32.gucDecoderIndex]='\0'; + esp32.tc_flag=1; + esp32.gucDecoderIndex=0; + DBG_PRINTF("%s\r\n",esp32.ReceiveBuffer); + + } + + +} + + +/** + * @brief 通过UART3发送单个字节 + * @param ch: 要发送的字符( + * @note 阻塞式发送,会一直等待直到发送缓冲区可用 + */ +// void U3SendCh(unsigned int ch) +// { +// // 等待发送缓冲区空(TXFF标志为0表示可写入) +// while (UART3->UART_FR.BIT.txff == 1) { +// ; // 空循环等待 +// } + +// // 写入数据寄存器(强制截取低8位) +// UART3->UART_DR.BIT.data = (unsigned char)ch; +// } + +void U3SendCh(unsigned char ch) +{ + // 等待发送缓冲区空(TXFF标志为0表示可写入) + while (UART3->UART_FR.BIT.txff == 1) { + ; // 空循环等待 + } + + // 写入数据寄存器 + UART3->UART_DR.BIT.data = ch; +} + + +/** + * @brief 通过UART3发送字符串(以'\0'结尾) + * @param pBuffer: 字符串指针(8位无符号数组) + * @note 逐字节发送,直到遇到字符串结束符'\0' + */ +void WiFiSend(u8* pBuffer) +{ + // 遍历字符串直到结束符 + while(*pBuffer != '\0') + { + // 调用单字节发送函数 + U3SendCh(*pBuffer); + + // 移动到下一个字符 + pBuffer++; + } +} + + + + +/* +Function name:ESP32_SendAt +Description:发送AT指令并判断ESP32回应词 +param:u8 *cmd 发送AT指令 + u8 *respond需要判断的回应词 +retval:u8 0:成功 1:失败 +Remarks: +AT执行成功:OK 失败:ERRO +*/ + +u8 ESP32_SendAt(u8 *cmd,u8 *respond) +{ + //1.发送AT指令 + WiFiSend(cmd); + BASE_FUNC_DelayMs(300); + //2.判断回应词 + while(1) + { + //等待ESP32数据接收完成 + while(!esp32.tc_flag); + esp32.tc_flag=0; + if(strstr((const char*)esp32.ReceiveBuffer,(const char*)respond)!=NULL) + { + + return 0; + } + else + { + return 1; + } + } +} + + + +u8 ESP32_Init(void) +{ + + //2.ESP32初始化 + WiFiSend((u8*)"+++");//退出透传,准备发送AT指令设置ESP32 + BASE_FUNC_DelayMs(300); + WiFiSend((u8*)"AT\r\n");//发送一条正确的AT指令跳过格式错误 + BASE_FUNC_DelayMs(300); + WiFiSend((u8*)"AT+RESTORE\r\n");//恢复出厂设置 + BASE_FUNC_DelayMs(1000); + + if( ESP32_SendAt((u8 *)"AT+CWMODE=1\r\n",(u8 *)"OK")!=0) + { + DBG_PRINTF(" set up client Faile\r\n"); + return 1; + } + DBG_PRINTF("set up client Success\r\n"); + + + if( ESP32_SendAt((u8 *)"AT+CIPMODE=1\r\n",(u8 *)"OK")!=0) + { + DBG_PRINTF("Setti transparent transmission faile\r\n"); + return 2; + } + + DBG_PRINTF("Setti transparent transmission Success\r\n"); + + DBG_PRINTF("ESP32 TCP init Success\r\n"); + + return 0; + +} + + + + +/* +Function name:ESP32_ConnectAp +Description:ESP32连接路由器 +param:u8 *ssid WIFI账户名 + u8 *pwd WIFI密码 +retval:u8 0:成功 1:失败 +Remarks: +AT执行成功:OK 失败:ERRO +*/ +u8 ESP32_ConnectAp(u8 *ssid,u8 *pwd) +{ + + //使用AT指令向ESP32发送wifi账号和wifi密码 + /*方法一*/ +// u8 wifi_buff[100]= "AT+CWJAP=\""; +// strcat((char *)wifi_buff,(char *)ssid); +// strcat((char *)wifi_buff,"\",\""); +// strcat((char *)wifi_buff,(char *)pwd); +// strcat((char *)wifi_buff,"\"\r\n"); + /*方法二*/ + u8 wifi_buff[100]; + + sprintf((char *)wifi_buff,"AT+CWJAP=\"%s\",\"%s\"\r\n",ssid,pwd); + + WiFiSend(wifi_buff);//发送连接AP指令 + while(1) + { + while(!esp32.tc_flag);//等待ESP32数据接收完成 + esp32.tc_flag = 0; + + if(strstr((const char *)esp32.ReceiveBuffer,"OK") != NULL) + { + + DBG_PRINTF("WIFI AP Connection success\r\n"); + return 0; + } + if(strstr((const char *)esp32.ReceiveBuffer,"ERROR") != NULL) + { + + DBG_PRINTF("WIFI AP Connection fail\r\n"); + return 1; + } + } + +} + + +/* +Function name:ESP32_ConnectSer +Description:ESP32连接服务器 +param: + u8 *ip 服务器地址 + u8 *port 远端端口号 +retval:u8 0:成功 1:失败 +Remarks: + +*/ +u8 ESP32_ConnectSer(u8 *ip,u8 *port) +{ + u8 wifi_buff[200]={0}; + sprintf((char *)wifi_buff,"AT+CIPSTART=\"TCP\",\"%s\",%s\r\n",ip,port); + + WiFiSend(wifi_buff);//发送连接服务器指令\ + + while(1) + { + while(!esp32.tc_flag); + + esp32.tc_flag=0; + if(strstr((const char*)esp32.ReceiveBuffer,"OK")!=NULL) + { + + DBG_PRINTF("Server connection successful\r\n"); + return 0; + } + if(strstr((const char*)esp32.ReceiveBuffer,"ERROR")!=NULL) + { + + DBG_PRINTF("server connection failed\r\n"); + return 1; + + } + } +} + + + +/* +Function name:ESP32_Start_Connect +Description:ESP32开始配网 +param: +retval:u8 0:成功 1:失败 +Remarks: + +*/ + +u8 ESP32_Start_Connect(void) +{ + u8 ret = 0; + if(ESP32_Init()==0)//ESP32初始化 + { + if(ESP32_ConnectAp((u8 *)"WZW",(u8 *)"12345678")==0)//ESP32连接AP + { + if(ESP32_ConnectSer((u8 *)ServerAddress,(u8 *)ServerPort)==0)//ESP32连接腾讯云服务器 + { + ESP32_SendAt((u8 *)"AT+CIPSEND\r\n",(u8 *)"OK");//进入透传 + + _mqtt.Init(rxbuf,0,txbuf,0);//初始化MQTT框架 + + ret=_mqtt.Connect(Client,User,Pass); + if(ret) + { + DBG_PRINTF("MQTT Tencent Cloud Success\r\n"); + ret = _mqtt.SubscribeTopic(SubTopic,0,1); + + DBG_PRINTF("ret=%d\r\n",ret); + if(ret) + { + DBG_PRINTF("Subscription successful\r\n"); + } + else + { + DBG_PRINTF("Subscription failed\r\n"); + } + + } + else + DBG_PRINTF("MQTT connection to Tencent Cloud failed\r\n"); + } + } + } +} + + + + +/*t +Function name:ESP32_Control +Description:接收服务器数据,执行对应功能 +param: +retval: +Remarks: +接收服务器的数据,会保存到exp32.buff里面 + +*/ + +void ESP32_Control(void) +{ + + + //服务器控制开关电机 + if(strstr((const char*)esp32.ReceiveBuffer,"\"OpenMotor\":1")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Motor Open\r\n"); + + + } + + if(strstr((const char*)esp32.ReceiveBuffer,"\"OpenMotor\":0")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Motor close\r\n"); + + } + + if(strstr((const char*)esp32.ReceiveBuffer,"\"OpenMotor\":1")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Motor Open\r\n"); + + + } + //服务器控制电机转速 + + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":1")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Level 1\r\n"); + + } + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":2")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Level 2\r\n"); + + } + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":3")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Level 3\r\n"); + + } + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":4")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Level 4\r\n"); + + } + + + + //上传速度值 + + + + + +} + + + +/* +Function name:ESP32_DatatoServer +Description:发送服务器数据 +param: u8 *mark 功能标识 +retval: u8 *value 功能数值 +Remarks: +接收服务器的数据,会保存到exp32.buff里面 + +*/ + +void ESP32_DatatoServer(u8 *mark,u8 value) +{ + u8 message_buff[300]={0}; + sprintf((char *)message_buff,"{\"method\":\"report\",\"clientToken\":\"v2179483179IgNsi::h6-Td$aDz\",\"params\":{\"%s\":%d}}",mark,value); + _mqtt.PublishData(PupTopic,(char *)message_buff,0); +} + + + + + + + + + + + + + + diff --git a/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/wifi.h b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/wifi.h new file mode 100644 index 00000000..902648ae --- /dev/null +++ b/vendor/yibaina_3061M/1025_Six_Step_Wave_Wifi/user/wifi/wifi.h @@ -0,0 +1,71 @@ +#ifndef __WIFI_C__ +#define __WIFI_C__ + +#include "main.h" + +typedef signed char INT8S, S8; +typedef unsigned char BYTE, INT8U, U8, u8; +typedef signed short int INT16S, S16; +typedef unsigned short int WORD, INT16U, U16, u16; +typedef signed long LONG, INT32S, S32; +typedef unsigned long DWORD, INT32U, U32, u32; + +//三元组宏定义 +#define Client "D5MLGDVORYMotorControl" //ID +#define User "D5MLGDVORYMotorControl;12010126;IFCJK;1745908540" //用户名称 +#define Pass "5eec1815a1400df602c3d26ce4b3e60a3c89d164428a77720b64a37969cdbde5;hmacsha256" //密钥 + +#define ServerAddress "D5MLGDVORY.iotcloud.tencentdevices.com" //服务器地址 +#define ServerPort "1883" //端口 + +#define SubTopic "$thing/down/property/D5MLGDVORY/MotorControl" //订阅 +#define PupTopic "$thing/up/property/D5MLGDVORY/MotorControl" //发布 + +extern U8 U3RxBuffer[100]; + + + + +typedef struct +{ + u8 ReceiveBuffer[3048]; //保存接收ESP32/服务器数据 + U16 gucDecoderIndex; //决定接收数据的长度 + u8 tc_flag; //传输完成标志位 + u8 time[50]; //保存时间 + u8 t_len; + +}ESP32_STRUCT; + +extern ESP32_STRUCT esp32; + + + + + +void WiFiSend(u8* pBuffer); + +u8 ESP32_Init(void); +u8 ESP32_ConnectAp(u8 *ssid,u8 *pwd); +u8 ESP32_Start_Connect(void); +void ESP32_Control(void); +void ESP32_DatatoServer(u8 *mark,u8 value); + + + + + + + + + + + +#endif + + + + + + + + diff --git a/vendor/yibaina_3061M/AS5600_IIC/readme.md b/vendor/yibaina_3061M/AS5600_IIC/readme.md new file mode 100644 index 00000000..0dbec336 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/readme.md @@ -0,0 +1,29 @@ +# AS5600_IIC + +**【功能描述】** + +- 基于ECMCU105H/ECBMCU201MPC单板的AS5600磁编码器的应用 + +**【环境要求】** + +- 编码器选用AS5600 + +- 编码器安装上电机,磁铁与编码器表面距离为0.5-3mm之间 + +- 接线方式: + + ic0_SCL---GPIO4_5---J2_21 + + ic0_SDA---GPIO4_3---J2_26 + + 5v ---J1_17 + + GND---J1_7 + +**【配置方法】** + +- 将user文件夹替换原工程文件夹即可 + +【操作说明】 + +- 编码器固定后,转动电机可以获取电机位置值 diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/generatecode/feature.h b/vendor/yibaina_3061M/AS5600_IIC/user/generatecode/feature.h new file mode 100644 index 00000000..715371be --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/generatecode/feature.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-14 14:05:10 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define CHIP_3061MNPICA MACRO_ENABLE + +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 30000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_UART_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/generatecode/main.h b/vendor/yibaina_3061M/AS5600_IIC/user/generatecode/main.h new file mode 100644 index 00000000..40d65b1d --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/generatecode/main.h @@ -0,0 +1,98 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.h + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-14 14:05:10 + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_SYSTEM_INIT_H +#define McuMagicTag_SYSTEM_INIT_H + +#include "adc.h" +#include "adc_ex.h" +#include "acmp.h" +#include "acmp_ex.h" +#include "apt.h" +#include "uart.h" +#include "uart_ex.h" +#include "gpio.h" +#include "timer.h" +#include "timer_ex.h" +#include "pga.h" +#include "crg.h" +#include "dma.h" +#include "dma_ex.h" +#include "iocmg.h" + +#define IO_SPEED_FAST 0x00U +#define IO_SPEED_SLOW 0x01U + +#define IO_DRV_LEVEL4 0x00U +#define IO_DRV_LEVEL3 0x01U +#define IO_DRV_LEVEL2 0x02U +#define IO_DRV_LEVEL1 0x03U + +#define XTAL_DRV_LEVEL4 0x03U +#define XTAL_DRV_LEVEL3 0x02U +#define XTAL_DRV_LEVEL2 0x01U +#define XTAL_DRV_LEVEL1 0x00U + +#define GpioStartStop_PIN GPIO_PIN_4 +#define GpioStartStop_HANDLE g_gpio2 + +extern ACMP_Handle g_acmp0; +extern PGA_Handle g_pga0; +extern PGA_Handle g_pga1; +extern TIMER_Handle g_timer0; +extern TIMER_Handle g_timer1; +extern UART_Handle g_uart0; +extern APT_Handle g_apt0; +extern APT_Handle g_apt1; +extern APT_Handle g_apt2; +extern ADC_Handle g_adc0; + +extern DMA_Handle g_dmac; + +extern GPIO_Handle g_gpio2; +extern GPIO_Handle g_gpio1; + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect); +void SystemInit(void); + +void UART0WriteInterruptCallback(void *handle); +void UART0ReadInterruptCallback(void *handle); + +void UART0InterruptErrorCallback(void *handle); +void MotorStatemachineCallBack(void *handle); +void TIMER1_DMAOverFlow_InterruptProcess(void *handle); +void CheckPotentiometerValueCallback(void *handle); +void TIMER0_DMAOverFlow_InterruptProcess(void *handle); +void MotorCarrierProcessCallback(void *aptHandle); +void MotorSysErrCallback(void *aptHandle); + +void UART0_TXDMACallback(void *handle); + +void MotorStartStopKeyCallback(void *param); + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_SYSTEM_INIT_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/generatecode/system_init.c b/vendor/yibaina_3061M/AS5600_IIC/user/generatecode/system_init.c new file mode 100644 index 00000000..d49cd860 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/generatecode/system_init.c @@ -0,0 +1,677 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file system_init.c + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-14 14:05:10 + */ + +#include "main.h" +#include "ioconfig.h" +#include "iocmg_ip.h" + +#define UART0_BAUD_RATE 1843200 + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) +{ + CRG_Handle crg; + crg.baseAddress = CRG; + crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC; + crg.pllPreDiv = CRG_PLL_PREDIV_4; + crg.pllFbDiv = 48; /* PLL Multiplier 48 */ + crg.pllPostDiv = CRG_PLL_POSTDIV_2; + crg.coreClkSelect = CRG_CORE_CLK_SELECT_PLL; + crg.handleEx.pllPostDiv2 = CRG_PLL_POSTDIV2_3; + crg.handleEx.clk1MSelect = CRG_1M_CLK_SELECT_HOSC; + crg.handleEx.clk1MDiv = (25 - 1); /* The 1 MHz freq is equal to the input clock frequency / (clk_1m_div + 1). 25 is the div of the clk_1m in CLOCK. */ + + if (HAL_CRG_Init(&crg) != BASE_STATUS_OK) { + return BASE_STATUS_ERROR; + } + *coreClkSelect = crg.coreClkSelect; + return BASE_STATUS_OK; +} + +static void DMA_Channel0Init(void *handle) +{ + DMA_ChannelParam dma_param; + dma_param.direction = DMA_MEMORY_TO_PERIPH_BY_DMAC; + dma_param.srcAddrInc = DMA_ADDR_INCREASE; + dma_param.destAddrInc = DMA_ADDR_UNALTERED; + dma_param.srcPeriph = DMA_REQUEST_MEM; + dma_param.destPeriph = DMA_REQUEST_UART0_TX; + dma_param.srcWidth = DMA_TRANSWIDTH_BYTE; + dma_param.destWidth = DMA_TRANSWIDTH_BYTE; + dma_param.srcBurst = DMA_BURST_LENGTH_1; + dma_param.destBurst = DMA_BURST_LENGTH_1; + dma_param.pHandle = handle; + HAL_DMA_InitChannel(&g_dmac, &dma_param, DMA_CHANNEL_ZERO); +} + +static void DMA_Init(void) +{ + HAL_CRG_IpEnableSet(DMA_BASE, IP_CLK_ENABLE); + g_dmac.baseAddress = DMA; + IRQ_Register(IRQ_DMA_TC, HAL_DMA_IrqHandlerTc, &g_dmac); + IRQ_Register(IRQ_DMA_ERR, HAL_DMA_IrqHandlerError, &g_dmac); + IRQ_EnableN(IRQ_DMA_TC); + IRQ_EnableN(IRQ_DMA_ERR); + HAL_DMA_Init(&g_dmac); + DMA_Channel0Init((void *)(&g_uart0)); + HAL_DMA_SetChannelPriorityEx(&g_dmac, DMA_CHANNEL_ZERO, DMA_PRIORITY_HIGHEST); +} + +static void ACMP0_Init(void) +{ + HAL_CRG_IpEnableSet(ACMP0_BASE, IP_CLK_ENABLE); /* ACMP clock bit reset. */ + g_acmp0.baseAddress = ACMP0_BASE; + g_acmp0.inOutConfig.inputNNum = ACMP_INPUT_N_SELECT2; + g_acmp0.inOutConfig.inputPNum = ACMP_INPUT_P_SELECT2; + g_acmp0.inOutConfig.polarity = ACMP_OUT_NOT_INVERT; + g_acmp0.filterCtrl.filterMode = ACMP_FILTER_NONE; + g_acmp0.hysteresisVol = ACMP_HYS_VOL_30MV; + g_acmp0.interruptEn = BASE_CFG_UNSET; + HAL_ACMP_Init(&g_acmp0); +} + +static void ADC0_Init(void) +{ + HAL_CRG_IpEnableSet(ADC0_BASE, IP_CLK_ENABLE); + HAL_CRG_IpClkSelectSet(ADC0_BASE, CRG_ADC_CLK_ASYN_PLL_DIV); + HAL_CRG_IpClkDivSet(ADC0_BASE, CRG_ADC_DIV_1); + + g_adc0.baseAddress = ADC0; + g_adc0.socPriority = ADC_PRIMODE_ALL_ROUND; + + HAL_ADC_Init(&g_adc0); + + SOC_Param socParam = {0}; + socParam.adcInput = ADC_CH_ADCINA0; /* PGA0_OUT(ADC AIN0) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM1, &socParam); + + socParam.adcInput = ADC_CH_ADCINA1; /* PGA1_OUT(ADC AIN1) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM6, &socParam); + + socParam.adcInput = ADC_CH_ADCINA9; /* PIN7(ADC AIN9) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM0, &socParam); + + socParam.adcInput = ADC_CH_ADCINA5; /* PIN2(ADC AIN5) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM3, &socParam); + + socParam.adcInput = ADC_CH_ADCINA15; /* PIN14(ADC AIN15) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM4, &socParam); +} + +__weak void MotorSysErrCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_EVENT_INTERRUPT */ + /* USER CODE END APT0_EVENT_INTERRUPT */ +} + +__weak void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +static void APT0_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_ENABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt0, &protectApt); +} + +static void APT0_Init(void) +{ + HAL_CRG_IpEnableSet(APT0_BASE, IP_CLK_ENABLE); + + g_apt0.baseAddress = APT0; + + /* Clock Settings */ + g_apt0.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt0.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt0.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt0.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt0.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.divInitVal = 0; + g_apt0.waveform.cntInitVal = 0; + g_apt0.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt0.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt0.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt0.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt0.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCA = 375; /* 375 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt0.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCA = 1; + + /* ADC Trigger SOCB */ + g_apt0.adcTrg.trgEnSOCB = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCB = 1; + g_apt0.adcTrg.trgSrcSOCB = APT_CS_SRC_CNTR_CMPB_DOWN; + g_apt0.adcTrg.trgScaleSOCB = 1; + + g_apt0.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + /* Timer Trigger */ + g_apt0.tmrInterrupt.tmrInterruptEn = BASE_CFG_ENABLE; + g_apt0.tmrInterrupt.tmrInterruptSrc = APT_INT_SRC_CNTR_ZERO; + g_apt0.tmrInterrupt.tmrInterruptScale = 1; + + APT0_ProtectInit(); + + HAL_APT_PWMInit(&g_apt0); + HAL_APT_RegisterCallBack(&g_apt0, APT_EVENT_INTERRUPT, MotorSysErrCallback); + IRQ_SetPriority(IRQ_APT0_EVT, 7); /* 7 is priority value */ + IRQ_Register(IRQ_APT0_EVT, HAL_APT_EventIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_EVT); + HAL_APT_RegisterCallBack(&g_apt0, APT_TIMER_INTERRUPT, MotorCarrierProcessCallback); + IRQ_SetPriority(IRQ_APT0_TMR, 5); /* 5 is priority value */ + IRQ_Register(IRQ_APT0_TMR, HAL_APT_TimerIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_TMR); +} + +static void APT1_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt1, &protectApt); +} + +static void APT1_Init(void) +{ + HAL_CRG_IpEnableSet(APT1_BASE, IP_CLK_ENABLE); + + g_apt1.baseAddress = APT1; + + /* Clock Settings */ + g_apt1.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt1.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt1.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt1.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt1.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.divInitVal = 0; + g_apt1.waveform.cntInitVal = 0; + g_apt1.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt1.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt1.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt1.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + APT1_ProtectInit(); + + HAL_APT_PWMInit(&g_apt1); +} + +static void APT2_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt2, &protectApt); +} + +static void APT2_Init(void) +{ + HAL_CRG_IpEnableSet(APT2_BASE, IP_CLK_ENABLE); + + g_apt2.baseAddress = APT2; + + /* Clock Settings */ + g_apt2.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt2.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt2.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt2.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt2.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.divInitVal = 0; + g_apt2.waveform.cntInitVal = 0; + g_apt2.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt2.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt2.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt2.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt2.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + APT2_ProtectInit(); + + HAL_APT_PWMInit(&g_apt2); +} + +__weak void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + BASE_FUNC_UNUSED(handle); +} + +static void GPIO_Init(void) +{ + HAL_CRG_IpEnableSet(GPIO2_BASE, IP_CLK_ENABLE); + g_gpio2.baseAddress = GPIO2; + + g_gpio2.pins = GPIO_PIN_3; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_NONE); + + g_gpio2.pins = GPIO_PIN_4; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_INPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_LOW_LEVEL); + + HAL_CRG_IpEnableSet(GPIO1_BASE, IP_CLK_ENABLE); + g_gpio1.baseAddress = GPIO1; + + g_gpio1.pins = GPIO_PIN_0; + HAL_GPIO_Init(&g_gpio1); + HAL_GPIO_SetDirection(&g_gpio1, g_gpio1.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio1, g_gpio1.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio1, g_gpio1.pins, GPIO_INT_TYPE_NONE); + + HAL_GPIO_RegisterCallBack(&g_gpio2, GPIO_PIN_4, MotorStartStopKeyCallback); + IRQ_Register(IRQ_GPIO2, HAL_GPIO_IrqHandler, &g_gpio2); + IRQ_SetPriority(IRQ_GPIO2, 1); /* set gpio1 interrupt priority to 1, 1~15. 1 is priority value */ + IRQ_EnableN(IRQ_GPIO2); /* gpio interrupt enable */ + + return; +} + +static void PGA0_Init(void) +{ + HAL_CRG_IpEnableSet(PGA0_BASE, IP_CLK_ENABLE); + + g_pga0.baseAddress = PGA0_BASE; + g_pga0.externalResistorMode = BASE_CFG_ENABLE; + g_pga0.handleEx.extCapCompensation = PGA_EXT_COMPENSATION_2X; + HAL_PGA_Init(&g_pga0); +} + +static void PGA1_Init(void) +{ + HAL_CRG_IpEnableSet(PGA1_BASE, IP_CLK_ENABLE); + + g_pga1.baseAddress = PGA1_BASE; + g_pga1.externalResistorMode = BASE_CFG_ENABLE; + g_pga1.handleEx.extCapCompensation = PGA_EXT_COMPENSATION_2X; + HAL_PGA_Init(&g_pga1); +} + +__weak void CheckPotentiometerValueCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN CheckPotentiometerValueCallback */ + /* USER CODE END CheckPotentiometerValueCallback */ +} + +static void TIMER0_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER0_BASE, IP_CLK_ENABLE); /* TIMER0 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER0) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 1000000; + + g_timer0.baseAddress = TIMER0; + g_timer0.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer0.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer0.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer0.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer0.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer0.interruptEn = BASE_CFG_ENABLE; + g_timer0.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer0.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer0); + IRQ_Register(IRQ_TIMER0, HAL_TIMER_IrqHandler, &g_timer0); + + HAL_TIMER_RegisterCallback(&g_timer0, TIMER_PERIOD_FIN, CheckPotentiometerValueCallback); + IRQ_SetPriority(IRQ_TIMER0, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_TIMER0); +} + +__weak void MotorStatemachineCallBack(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN MotorStatemachineCallBack */ + /* USER CODE END MotorStatemachineCallBack */ +} + +static void TIMER1_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER1_BASE, IP_CLK_ENABLE); /* TIMER1 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER1) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 500; + + g_timer1.baseAddress = TIMER1; + g_timer1.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer1.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer1.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer1.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer1.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer1.interruptEn = BASE_CFG_ENABLE; + g_timer1.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer1.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer1); + IRQ_Register(IRQ_TIMER1, HAL_TIMER_IrqHandler, &g_timer1); + + HAL_TIMER_RegisterCallback(&g_timer1, TIMER_PERIOD_FIN, MotorStatemachineCallBack); + IRQ_SetPriority(IRQ_TIMER1, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_TIMER1); +} + +__weak void UART0InterruptErrorCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_TRNS_IT_ERROR */ + /* USER CODE END UART0_TRNS_IT_ERROR */ +} + +__weak void UART0_TXDMACallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_WRITE_DMA_FINISH */ + /* USER CODE END UART0_WRITE_DMA_FINISH */ +} + +__weak void UART0WriteInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_WRITE_IT_FINISH */ + /* USER CODE END UART0_WRITE_IT_FINISH */ +} + +__weak void UART0ReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_READ_IT_FINISH */ + /* USER CODE END UART0_READ_IT_FINISH */ +} + +static void UART0_Init(void) +{ + HAL_CRG_IpEnableSet(UART0_BASE, IP_CLK_ENABLE); /* UART0 clock enable. */ + g_uart0.baseAddress = UART0; + + g_uart0.baudRate = UART0_BAUD_RATE; + g_uart0.dataLength = UART_DATALENGTH_8BIT; + g_uart0.stopBits = UART_STOPBITS_ONE; + g_uart0.parity = UART_PARITY_NONE; + g_uart0.txMode = UART_MODE_DMA; + g_uart0.rxMode = UART_MODE_INTERRUPT; + g_uart0.fifoMode = BASE_CFG_ENABLE; + g_uart0.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart0.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart0.hwFlowCtr = BASE_CFG_DISABLE; + g_uart0.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart0.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart0); + HAL_UART_RegisterCallBack(&g_uart0, UART_TRNS_IT_ERROR, (UART_CallbackType)UART0InterruptErrorCallback); + HAL_UART_RegisterCallBack(&g_uart0, UART_READ_IT_FINISH, (UART_CallbackType)UART0ReadInterruptCallback); + IRQ_Register(IRQ_UART0, HAL_UART_IrqHandler, &g_uart0); + IRQ_SetPriority(IRQ_UART0, 6); /* 6 is priority value */ + IRQ_EnableN(IRQ_UART0); + g_uart0.dmaHandle = &g_dmac; + g_uart0.uartDmaTxChn = 0; + HAL_UART_RegisterCallBack(&g_uart0, UART_WRITE_DMA_FINISH, (UART_CallbackType)UART0_TXDMACallback); + HAL_UART_RegisterCallBack(&g_uart0, UART_WRITE_IT_FINISH, (UART_CallbackType)UART0WriteInterruptCallback); +} + +static void IOConfig(void) +{ + SYSCTRL0->SC_SYS_STAT.BIT.update_mode = 0; + SYSCTRL0->SC_SYS_STAT.BIT.update_mode_clear = 1; + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN1 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_7_AS_ACMP0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_7_AS_ACMP0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_7_AS_ACMP0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_7_AS_ACMP0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_7_AS_ACMP0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN48 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_6_AS_ACMP_N2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_6_AS_ACMP_N2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_6_AS_ACMP_N2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_6_AS_ACMP_N2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_6_AS_ACMP_N2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN47 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_5_AS_ACMP_P2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_5_AS_ACMP_P2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_5_AS_ACMP_P2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_5_AS_ACMP_P2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_5_AS_ACMP_P2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN4 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_6_AS_PGA0_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_6_AS_PGA0_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_6_AS_PGA0_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_6_AS_PGA0_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_6_AS_PGA0_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN5 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_5_AS_PGA0_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_5_AS_PGA0_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_5_AS_PGA0_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_5_AS_PGA0_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_5_AS_PGA0_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN3 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_7_AS_PGA0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_7_AS_PGA0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_7_AS_PGA0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_7_AS_PGA0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_7_AS_PGA0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN7 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_7_AS_ADC_AIN9); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_7_AS_ADC_AIN9, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_7_AS_ADC_AIN9, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_7_AS_ADC_AIN9, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_7_AS_ADC_AIN9, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN2 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO5_1_AS_ADC_AIN5); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO5_1_AS_ADC_AIN5, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO5_1_AS_ADC_AIN5, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO5_1_AS_ADC_AIN5, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO5_1_AS_ADC_AIN5, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN14 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_7_AS_ADC_AIN15); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_7_AS_ADC_AIN15, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_7_AS_ADC_AIN15, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_7_AS_ADC_AIN15, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_7_AS_ADC_AIN15, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN11 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_5_AS_PGA1_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_5_AS_PGA1_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_5_AS_PGA1_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_5_AS_PGA1_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_5_AS_PGA1_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN12 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_6_AS_PGA1_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_6_AS_PGA1_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_6_AS_PGA1_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_6_AS_PGA1_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_6_AS_PGA1_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN13 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_7_AS_PGA1_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_7_AS_PGA1_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_7_AS_PGA1_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_7_AS_PGA1_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_7_AS_PGA1_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN35 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_3_AS_GPIO2_3); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_3_AS_GPIO2_3, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_3_AS_GPIO2_3, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_3_AS_GPIO2_3, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_3_AS_GPIO2_3, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN27 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_0_AS_GPIO1_0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_0_AS_GPIO1_0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_0_AS_GPIO1_0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_0_AS_GPIO1_0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_0_AS_GPIO1_0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN41 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_4_AS_GPIO2_4); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_4_AS_GPIO2_4, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_4_AS_GPIO2_4, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_4_AS_GPIO2_4, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_4_AS_GPIO2_4, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN19 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_0_AS_APT0_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_0_AS_APT0_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_0_AS_APT0_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_0_AS_APT0_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_0_AS_APT0_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN23 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_0_AS_APT0_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_0_AS_APT0_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_0_AS_APT0_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_0_AS_APT0_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_0_AS_APT0_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN20 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_1_AS_APT1_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_1_AS_APT1_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_1_AS_APT1_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_1_AS_APT1_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_1_AS_APT1_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN24 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_1_AS_APT1_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_1_AS_APT1_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_1_AS_APT1_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_1_AS_APT1_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_1_AS_APT1_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN21 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_2_AS_APT2_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_2_AS_APT2_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_2_AS_APT2_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_2_AS_APT2_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_2_AS_APT2_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN25 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_2_AS_APT2_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_2_AS_APT2_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_2_AS_APT2_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_2_AS_APT2_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_2_AS_APT2_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ +} + +static void APT_SyncMasterInit(void) +{ + HAL_APT_MasterSyncInit(&g_apt0, APT_SYNC_OUT_ON_CNTR_ZERO); +} + +static void APT_SyncSlaveInit(void) +{ + APT_SlaveSyncIn aptSlave; + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt1, &aptSlave); + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt2, &aptSlave); + +} + +void SystemInit(void) +{ + IOConfig(); + DMA_Init(); + UART0_Init(); + ACMP0_Init(); + APT0_Init(); + APT1_Init(); + APT2_Init(); + ADC0_Init(); + PGA0_Init(); + PGA1_Init(); + TIMER0_Init(); + TIMER1_Init(); + GPIO_Init(); + + APT_SyncMasterInit(); + APT_SyncSlaveInit(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/main.c b/vendor/yibaina_3061M/AS5600_IIC/user/main.c new file mode 100644 index 00000000..d6ab767c --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/main.c @@ -0,0 +1,71 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + * @date 2025-04-14 14:05:10 + */ + +#include "typedefs.h" +#include "feature.h" +#include "mcs_motor_process.h" +#include "main.h" +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ +/* USER CODE END 0 */ +ACMP_Handle g_acmp0; +PGA_Handle g_pga0; +PGA_Handle g_pga1; +TIMER_Handle g_timer0; +TIMER_Handle g_timer1; +UART_Handle g_uart0; +APT_Handle g_apt0; +APT_Handle g_apt1; +APT_Handle g_apt2; +ADC_Handle g_adc0; +DMA_Handle g_dmac; +GPIO_Handle g_gpio2; +GPIO_Handle g_gpio1; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ +/* USER CODE END 1 */ + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + /* USER CODE END 2 */ + MotorMainProcess(); + /* USER CODE BEGIN 3 */ + /* 建议用户放置初始配置代码 */ + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + /* 建议用户放置周期性执行代码 */ + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h new file mode 100644 index 00000000..dea3ad66 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h @@ -0,0 +1,142 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration for carrier interrupt processing function. + */ +#ifndef McuMagicTag_MCS_CARRIER_H +#define McuMagicTag_MCS_CARRIER_H + +#include "mcs_status.h" +#include "mcs_mtr_param.h" +#include "mcs_svpwm.h" +#include "mcs_curr_ctrl.h" +#include "mcs_if_ctrl.h" +#include "mcs_ramp_mgmt.h" +#include "mcs_spd_ctrl.h" +#include "mcs_fosmo.h" +#include "mcs_smo_4th.h" +#include "mcs_pll.h" +#include "mcs_startup.h" +#include "mcs_r1_svpwm.h" +#include "mcs_fw_ctrl.h" +#include "mcs_prot_user.h" + +typedef void (*MCS_ReadCurrUvwCb)(UvwAxis *CurrUvw); +typedef void (*MCS_SetPwmDutyCb)(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight); +typedef void (*MCS_SetADCTriggerTimeCb)(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB); + +/** + * @brief motor control FSM state define. + * @details motor control FSM state type: + * + FSM_IDLE -- IDLE state, system startup default. + * + FSM_OFFSET_CALIB -- Self calibrate, for ADC init. + * + FSM_CAP_CHARGE -- IPM cap charge. + * + FSM_CLEAR -- Clear before every run. + * + FSM_LOCATE -- Rotor position pre-locate. + * + FSM_STARTUP -- Start up. + * + FSM_SWITCH -- Transition state, control from open to closed loop. + * + FSM_RUN -- Normal running state. + * + FSM_WAIT_STOP -- Wait stopping. + * + FSM_STOP -- Normal stop. + * + FSM_FAULT -- Fault state, waiting for user process. + */ +typedef enum { + FSM_IDLE = 0, + FSM_OFFSET_CALIB, + FSM_CAP_CHARGE, + FSM_CLEAR, + FSM_LOCATE, + FSM_STARTUP, + FSM_SWITCH, + FSM_RUN, + FSM_WAIT_STOP, + FSM_STOP, + FSM_FAULT +} FsmState; + +/** + * @brief Sampling mode. + */ +typedef enum { + DUAL_RESISTORS = 0, + SINGLE_RESISTOR = 1 +} SampleMode; + +/** + * @brief Motor control data structure + */ +typedef struct { + unsigned char motorStateFlag; /**< Motor start/stop status flag. */ + float spdCmdHz; /**< External input speed command value. */ + float axisAngle; /**< Angle of the synchronous coordinate system. */ + float spdRefHz; /**< Command value after speed ramp management. */ + float currCtrlPeriod; /**< current loop control period. */ + float adc0Compensate; /**< ADC0 softwaretrim compensate value. */ + float adc1Compensate; /**< ADC1 softwaretrim compensate value. */ + float udc; /**< Bus voltage. */ + float powerBoardTemp; /**< Power boart surface temperature. */ + unsigned short aptMaxcntCmp; /**< Apt Maximum Comparison Count. */ + float adcCurrCofe; /**< Adc current sampling cofeature. */ + + unsigned short sysTickCnt; /**< System Timer Tick Count. */ + unsigned short capChargeTickNum; /**< Bootstrap Capacitor Charge Tick Count. */ + volatile unsigned int msTickCnt; /**< Millisecond-level counter, which can be used in 1-ms and 5-ms tasks. */ + unsigned short msTickNum; /**< Number of ticks corresponding to 1 ms. */ + char obserType; /**< Set Observer Type. */ + char controlMode; /**< Set foc control or sixstep bldc control mode or others. */ + char spdAdjustMode; /**< Set speed adjust mode. */ + char uartConnectFlag; /**< Uart connect success flag. */ + short uartHeartDetCnt; /**< Uart connect heart detect count. */ + float uartTimeStamp; /**< Uart data time stamp. */ + SysStatusReg statusReg; /**< System status. */ + FsmState stateMachine; /**< Motor Control State Machine. */ + + SampleMode sampleMode; /**< Current sampling mode setting: single resistor, double resistor. */ + MOTOR_Param mtrParam; /**< Motor parameters. */ + FOSMO_Handle smo; /**< SMO observer handle. */ + SMO4TH_Handle smo4th; /**< SMO 4th observer handle. */ + IF_Handle ifCtrl; /**< I/F control handle. */ + SVPWM_Handle sv; /**< Dual-resistance/three-resistance sampling SVPWM Handle. */ + R1SVPWM_Handle r1Sv; /**< Single-resistance phase-shifted SVPWM handle. */ + RMG_Handle spdRmg; /**< Ramp management struct for the speed controller input reference. */ + SPDCTRL_Handle spdCtrl; /**< Speed loop Control Handle. */ + CURRCTRL_Handle currCtrl; /**< Current loop control handle. */ + STARTUP_Handle startup; /**< Startup Switch Handle. */ + FW_Handle fw; /**< Flux-Weakening Handle. */ + + DqAxis idqRef; /**< Command value of the dq axis current. */ + UvwAxis currUvw; /**< Three-phase current sampling value. */ + AlbeAxis iabFbk; /**< αβ-axis current feedback value. */ + DqAxis idqFbk; /**< Current feedback value of the dq axis. */ + DqAxis vdqRef; /**< Current loop output dq voltage. */ + AlbeAxis vabRef; /**< Current loop output voltage αβ. */ + UvwAxis dutyUvw; /**< UVW three-phase duty cycle. */ + UvwAxis dutyUvwLeft; /**< Single Resistor UVW Three-Phase Left Duty Cycle. */ + UvwAxis dutyUvwRight; /**< Single Resistor UVW Three-Phase Right Duty Cycle. */ + + MCS_ReadCurrUvwCb readCurrUvwCb; /**< Read current callback function. */ + MCS_SetPwmDutyCb setPwmDutyCb; /**< Set the duty cycle callback function. */ + MCS_SetADCTriggerTimeCb setADCTriggerTimeCb; /**< Sets the ADC trigger point callback function. */ + + MotorProtStatus_Handle prot; /**< Motor protect status detection flag bit handle. */ +} MTRCTRL_Handle; + +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h new file mode 100644 index 00000000..38c00b5d --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h @@ -0,0 +1,76 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_chip_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H/ECBMCU201MPC app. + */ + +#ifndef McuMagicTag_MCS_CHIPCONFIG_H +#define McuMagicTag_MCS_CHIPCONFIG_H + +#include "feature.h" + +#if defined (CHIP_3061MNPICA) || defined (CHIP_3061MNPIKA) || defined (CHIP_3061MNNICA) || \ + defined (CHIP_3061MNNIKA) || defined (CHIP_3061MNPIC8) || defined(CHIP_3061MNNIC8) || \ + defined (CHIP_3061MNPIK8) || defined (CHIP_3061MNNIK8) + + #define ADCPTT_HANDLE g_adc0 + #define ADCRESIS_HANDLE g_adc0 + #define ADCUDC_HANDLE g_adc0 + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc0 + #define LED1_HANDLE g_gpio2 + #define LED2_HANDLE g_gpio1 + #define LED2_PIN GPIO_PIN_0 + #define LED1_PIN GPIO_PIN_3 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCUSOCNUM ADC_SOC_NUM1 + #define ADCRESISSOCNUM ADC_SOC_NUM3 + #define ADCUDCSOCNUM ADC_SOC_NUM4 + #define ADCWSOCNUM ADC_SOC_NUM6 + + #define ADC0COMPENSATE 2037.0f + #define ADC1COMPENSATE 2027.0f + +#endif + +#if defined (CHIP_3065HRPIRZ) || defined (CHIP_3065ARPIRZ) || defined (CHIP_3066MNPIRH) || \ + defined (CHIP_3065PNPIRH) || defined (CHIP_3065PNPIRE) || defined (CHIP_3065PNPIRA) + + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc1 + #define ADCRESIS_HANDLE g_adc2 + #define ADCUDC_HANDLE g_adc2 + #define ADCPTT_HANDLE g_adc2 + #define LED1_HANDLE g_gpio0 + #define LED2_HANDLE g_gpio0 + #define LED2_PIN GPIO_PIN_6 + #define LED1_PIN GPIO_PIN_7 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCRESISSOCNUM ADC_SOC_NUM1 + #define ADCUSOCNUM ADC_SOC_NUM8 + #define ADCWSOCNUM ADC_SOC_NUM8 + #define ADCUDCSOCNUM ADC_SOC_NUM14 + + #define ADC0COMPENSATE 2033.0f + #define ADC1COMPENSATE 2070.0f + +#endif + + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h new file mode 100644 index 00000000..2a6f38cc --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h @@ -0,0 +1,73 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_ctlmode_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H app. + */ + + /* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_CTLMODECONFIG_H +#define McuMagicTag_MCS_CTLMODECONFIG_H + +#include "debug.h" +#include "typedefs.h" + +typedef enum { + FOC_STARTUP_IF = 0, + FOC_STARTUP_VF, + FOC_STARTUP_HFI +} MOTOR_STARTUPMODE_CONFIG; + +typedef enum { + FOC_OBSERVERTYPE_SMO1TH = 0, + FOC_OBSERVERTYPE_SMO1TH_PLL, + FOC_OBSERVERTYPE_SMO4TH, + FOC_OBSERVERTYPE_SMO4TH_PLL, + FOC_OBSERVERTYPE_LUNBORG, + FOC_OBSERVERTYPE_FLUX +} MOTOR_OBSERVERTYPE_CONFIG; + +typedef enum { + FOC_CONTROLMODE_SPEED = 0, + FOC_CONTROLMODE_TORQUE +} MOTOR_CONTROLMODE_CONFIG; + +typedef enum { + FOC_CURQAXISPID_PARAMS = 0, + FOC_CURDAXISPID_PARAMS, + FOC_SPDPID_PARAMS +} MOTOR_PID_SET; + +typedef enum { + MOTOR_PARAMS_BASE = 0, + MOTOR_PARAMS_SPECIAL, + MOTOR_PARAMS_BOARD +} MOTOR_PARAMS_SET; + +typedef enum { + CUST_SPEED_ADJUST = 0, + HOST_SPEED_ADJUST +} MODE_ADSPEED_CONFIG; + +typedef enum { + CONNECTING = 0, + CONNECTED, + DISCONNECT +} UART_STATUS; + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h new file mode 100644 index 00000000..783bf214 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h @@ -0,0 +1,45 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.h + * @author MCU Algorithm Team + * @brief This file provides motor sample functions declaration for ECMCU105H board. + */ +#ifndef McuMagicTag_MCS_MOTOR_PROCESS_H +#define McuMagicTag_MCS_MOTOR_PROCESS_H + +/** + * @brief phase sequence. + */ +typedef enum { + PHASE_U = 0, + PHASE_V, + PHASE_W, + PHASE_MAX_NUM +} MCS_PhaseEnum; + +/** + * @brief key state. + */ +typedef enum { + KEY_DOWN = 0, + KEY_UP = 1, +} KEY_State; + +int MotorMainProcess(void); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h new file mode 100644 index 00000000..19510c78 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h @@ -0,0 +1,188 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_status.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_STATUS_H +#define McuMagicTag_MCS_STATUS_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "typedefs.h" +#include "mcs_assert.h" + +/* Typedef definitions ------------------------------------------------------------------------- */ +/** + * @brief System status define + */ +typedef union { + unsigned short all; + struct { + unsigned short cmdStart : 1; /**< Indicates that a start system command has been received. */ + unsigned short cmdStop : 1; /**< Indicates that a stop system command has been received. */ + unsigned short isRunning : 1; /**< Indicates that the system is running (enable signal) */ + unsigned short sysError : 1; /**< Indicates that the system reports an error. */ + unsigned short poweron : 1; /**< Indicates that the power-on initialization phase is complete. */ + unsigned short capcharge : 1; /**< Indicates that the bootstrap capacitor charging phase is complete. */ + unsigned short adczero : 1; /**< The current sampling point is reset to zero after power-on. */ + } Bit; +} SysStatusReg; + +/** + * @brief Get status of Bit cmdStart. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStart(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStart == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStart. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStartSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 1; +} + +/** + * @brief Clear Bit cmdStart. + * @param handle System status register handle. + * @retval None. + */ +static inline void SysCmdStartClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 0; +} + +/** + * @brief Get status of Bit cmdStop. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStop(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStop == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 1; +} + +/** + * @brief Clear Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 0; +} + +/** + * @brief Get status of Bit isRunning. + * @param sysStatus System status register handle. + * @retval Status of Bit isRunning. + */ +static inline bool SysIsRunning(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.isRunning == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 1; +} + +/** + * @brief Clear Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 0; +} + +/** + * @brief Get status of Bit sysError. + * @param sysStatus System status register handle. + * @retval Status of Bit sysError. + */ +static inline bool SysIsError(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.sysError == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 1; +} + +/** + * @brief Clear Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 0; +} + +#endif diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h new file mode 100644 index 00000000..d912206c --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h @@ -0,0 +1,108 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_user_config.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of user config parameters. + */ +#ifndef McuMagicTag_MCS_CONFIG_H +#define McuMagicTag_MCS_CONFIG_H + +#include "debug.h" +#include "typedefs.h" + +#define SMO4TH + +#define SYSTICK_PERIOD_US 500u /* systick period. */ + +#define INV_CAP_CHARGE_MS 3u /* Capacitor charging time. */ + +#define INV_VOLTAGE_BUS 12.0f /* Bus voltage, V. */ + +#define CTRL_CURR_PERIOD 0.0001f /* carrier ISR period, 100us. */ +#define CTRL_SYSTICK_PERIOD 0.0005f /* systick control period, 500us. */ + +/* Duty of sample window, the real time is 0.06*50us = 3us. */ +#define SAMPLE_WINDOW_DUTY 0.06f + +/* Duty of sample point shift as flip point, the real time is 0.008*50us = 0.4us. */ +#define SAMPLE_POINT_SHIFT 0.008f + +/* Sampling resistance 200mOhm 0.0013295 */ +#define ADC_CURR_COFFI 0.0013295f /* 3.3/4096/3.03/0.2 pga: 3.03, 200mohm. */ + +#define APT_U APT0_BASE /* Base address of U phase APT module. */ +#define APT_V APT1_BASE /* Base address of V phase APT module. */ +#define APT_W APT2_BASE /* Base address of W phase APT module. */ + +/* FOSMO */ +#define FOSMO_GAIN 4.0f /* SMO gain */ +#define FOSMO_LAMBDA 2.0f /* SMO coefficient of cut-off frequency, its value = lambda * we. */ +#define FOSMO_EMF_CUTOFF_FREQ 2.0f /* SMO back emf cutoff frequency. */ +#define SPEED_FILTER_CUTOFF_FREQUENCY 40.0f /* SMO speed cutoff frequency of speed filter. */ +#define FOSMO_PLL_BDW 30.0f /* SMO PLL bandwidth. */ + +/* SMO4TH */ +#define SMO4TH_PLL_BDW 30.0f /* SMO4TH PLL Bandwidth. */ +#define SMO4TH_KD 300.0f /* SMO4TH parameters KD. */ +#define SMO4TH_KQ 600.0f /* SMO4TH parameters KQ. */ +#define SMO4TH_SPD_FILTER_CUTOFF_FREQ 40.0f /* SMO4TH speed cutoff frequency of speed filter. */ + +/* User_Commond */ +#define CTRL_IF_CURR_AMP_A 0.3f /* IF control current amplitude. */ +#define USER_TARGET_SPD_HZ 100.0f /* User-defined target speed value. */ +#define USER_SWITCH_SPDBEGIN_HZ 30.0f /* Start of handover interval. */ +#define USER_SWITCH_SPDEND_HZ (USER_SWITCH_SPDBEGIN_HZ + 3.0f) /* End of handover period. */ +#define USER_MAX_SPD_HZ 180.25f /* User-defined maximum speed value. */ +#define USER_MIN_SPD_HZ 35.0f /* User-defined minimum speed value. */ +#define USER_SPD_SLOPE 50.0f /* slope of velocity change. */ +#define USER_CURR_SLOPE (CTRL_IF_CURR_AMP_A * 10.0f) /* Current change slope. */ + +/* PID PARAMS */ +#define CURRQAXIS_KP 5.023202f /* Current loop Q axis Kp. */ +#define CURRQAXIS_KI 20612.84f /* Current loop Q axis Ki. */ +#define CURRDAXIS_KP 3.477114f /* Current loop D axis Kp. */ +#define CURRDAXIS_KI 20612.84f /* Current loop D axis Ki. */ +/* Current loop PID output lower limit. */ +#define CURR_LOWERLIM (-INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.98f) +/* Current loop PID output upper limit. */ +#define CURR_UPPERLIM (INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.98f) + +#define SPD_KP 0.00505f /* Speed loop Kp. */ +#define SPD_KI 0.012f /* Speed loop Ki. */ +#define SPD_LOWERLIM (-0.105f) /* Speed loop PID output lower limit. */ +#define SPD_UPPERLIM 0.105f /* Speed loop PID output upper limit. */ + +/* MOTOR PARAMS */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift. */ +/* mtrPsif & mtrJ parameter is not used in this project, temporarily set to 0. */ +#define MOTORPARAM_DEFAULTS { \ + .mtrNp = 14, \ + .mtrRs = 10.1f, \ + .mtrLd = 0.010f, \ + .mtrLq = 0.010f, \ + .mtrPsif = 0.0f, \ + .mtrJ = 0.0f, \ + .maxElecSpd = 180.25f, \ + .maxCurr = 1.0f, \ + .busVolt = INV_VOLTAGE_BUS, \ +} + +/* Bus voltage sampling conversion factor. */ +#define ADC_UDC_COFFI 0.01289f /* 0.01289 = 3.3/4096*192/12. */ + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c new file mode 100644 index 00000000..99766bdf --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c @@ -0,0 +1,43 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.c + * @author MCU Algorithm Team + * @brief This file contains protection common api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt.h" +#include "mcs_assert.h" + +/** + * @brief Safty-pulse-off function execution to turn off all the power devices. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void ProtSpo_Exec(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /**< Turn off all the six power devices of the inverter. */ + for (unsigned int i = 0; i < MOTOR_PHASE_NUMBER; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_ForcePWMOutputLow(aptx); + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h new file mode 100644 index 00000000..104a5dec --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h @@ -0,0 +1,136 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.h + * @author MCU Algorithm Team + * @brief This file contains protection function common data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_CMM_H +#define McuMagicTag_MCS_PROT_CMM_H + +#include "typedefs.h" +#include "apt_ip.h" + +/* Macro definitions --------------------------------------------------------------------------- */ +#define MOTOR_PHASE_NUMBER (3) + +#define PROT_VAL_THRESHOLD_NUMS (4) +#define PROT_VAL_THRESHOLD_0 (0) +#define PROT_VAL_THRESHOLD_1 (1) +#define PROT_VAL_THRESHOLD_2 (2) +#define PROT_VAL_THRESHOLD_3 (3) + +#define PROT_LIMIT_TIME_NUMS (3) +#define PROT_LIMIT_TIME_0 (0) +#define PROT_LIMIT_TIME_1 (1) +#define PROT_LIMIT_TIME_2 (2) + +#define MOTOR_PHASE_NUMBER (3) + +/**< Motor error status definition. */ +typedef union { + int all; + struct { + unsigned short overCurrErr : 1; /**< Indicates that phase current(s) is over protected value. */ + unsigned short overVoltErr : 1; /**< Indicates that dc-link voltage is over protected value. */ + unsigned short lowerVoltErr : 1; /**< Indicates that dc-link voltage is lower than protected value */ + unsigned short overIpmTempErr : 1; /**< Indicates that IPM temperature is over protected value. */ + unsigned short revRotErr : 1; /**< Indicates that motor negtive direction. */ + unsigned short motorStalling : 1; /**< Indicates that rotor is stalling. */ + unsigned short overMotorTempErr : 1; /**< Indicates that three phase currents is out-of-balance. */ + unsigned short posSnsrCommsErr : 1; /**< Indicates that position sensor communication is lost with MCU. */ + unsigned short posSnsrFuncErr : 1; /**< Indicates that position sensor reports function error. */ + unsigned short posSnsrCalibrErr : 1; /**< Indicates that position sensor fails to calibrate itself. */ + unsigned short currOutOfBalance : 1; /**< Indicates that the rotor is reverse rotation.*/ + unsigned short phsOpenErr : 1; /**< Indicates that phase winding(s) is open. */ + unsigned short phsU : 1; /**< Indicates that u phase fails when phsOpenErr occurs. */ + unsigned short phsV : 1; /**< Indicates that v phase fails when phsOpenErr occurs. */ + unsigned short phsW : 1; /**< Indicates that w phase fails when phsOpenErr occurs. */ + unsigned short multiPhs : 1; /**< Indicates that multi-phases fail when phsOpenErr occurs.*/ + } Bit; +} MotorErrStatusReg; + +/**< Protection Status Bit Definition */ +typedef enum { + OCP_ERR_BIT, + OVP_ERR_BIT, + LVP_ERR_BIT, + OTP_IPM_ERR_BIT, + OTP_MOTOR_ERR_BIT, + STALLING_ERR_BIT, + CURR_OUT_BALANCE_ERR_BIT, + POS_COMMS_ERR_BIT, + POS_FUNC_ERR_BIT, + POS_CALIB_ERR_BIT, + REV_ROT_ERR_BIT, + PHS_OPEN_ERR_BIT, + PHS_U_ERR_BIT, + PHS_V_ERR_BIT, + PHS_W_ERR_BIT, + PHS_MULTI_ERR_BIT, +} PROT_ErrBit; + +/**< Motor error protection level. */ +typedef enum { + PROT_LEVEL_0 = 0, + PROT_LEVEL_1, + PROT_LEVEL_2, + PROT_LEVEL_3, + PROT_LEVEL_4 /**< The greater level number, the severe error is. */ +} PROT_Level; + +/** + * @brief Obtains the status of a bit of data. + * @param data data. + * @param bits Number of digits. + * @retval Bit status. + */ +static inline bool GetBit(int data, unsigned short bit) +{ + bool ret; + ret = ((data >> bit) & 1); + return ret; +} + +/** + * @brief Sets the status of a bit of data. + * @param data data. + * @param bit The setted bit. + * @retval None. + */ +static inline void SetBit(int *data, unsigned char bit) +{ + *data |= (1 << bit); +} + +/** + * @brief Clear the status of a bit of data. + * @param data data. + * @param bit The Clear bit. + * @retval None. + */ +static inline void ClearBit(int *data, unsigned char bit) +{ + *data &= ~(1 << bit); +} + +/**< Protection action. */ +void ProtSpo_Exec(APT_RegStruct **aptAddr); + +#endif diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c new file mode 100644 index 00000000..e97876b7 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c @@ -0,0 +1,137 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.c + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Get motor over current error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overCurrErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor lower dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.lowerVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Ipm temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overIpmTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Motor temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overMotorTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor stalling error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.motorStalling) { + return true; + } else { + return false; + } +} + +/** + * @brief Clear the motor error status. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + /* Clear the motor error status. */ + motorProt->motorErrStatus.all = 0x00; + OCP_Clear(&motorProt->ocp); + OVP_Clear(&motorProt->ovp); + LVP_Clear(&motorProt->lvp); + OTP_Clear(&motorProt->otp); +} + +/** + * @brief Motor protection function initialization. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void MotorProt_Init(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + motorProt->motorErrStatus.all = 0x00; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h new file mode 100644 index 00000000..365110e1 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h @@ -0,0 +1,54 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.h + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_H +#define McuMagicTag_MCS_PROT_USER_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_curr_prot.h" +#include "mcs_dc_volt_prot.h" +#include "mcs_temp_prot.h" +#include "mcs_motor_stalling.h" +#include "typedefs.h" + +typedef struct { + MotorErrStatusReg motorErrStatus; /**< Motor error status. */ + OCP_Handle ocp; /**< Over current protection. */ + OVP_Handle ovp; /**< Over dc-link voltage protection. */ + LVP_Handle lvp; /**< Lower dc-link voltage protection. */ + OTP_Handle otp; /**< Over IPM temperature protection. */ + STP_Handle stall; /**< Motor stalling protection. */ +} MotorProtStatus_Handle; + +void MotorProt_Init(MotorProtStatus_Handle *motorProt); + +/**< Inquiry motor error status */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus); +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus); +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h new file mode 100644 index 00000000..0e27318c --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h @@ -0,0 +1,125 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user_config.h + * @author MCU Algorithm Team + * @brief This file contans user macro definition of the protection function. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_CONFIG_H +#define McuMagicTag_MCS_PROT_USER_CONFIG_H + +/* Macro definitions --------------------------------------------------------------------------- */ +/**< COMMON */ +/**< Peak phase current (A) of the motor or IPM under continuous operations. */ +#define PROT_MOTOR_RATED_CURR (1.0f) +/**< Only several continuous fault detection can trigger error status. */ +#define PROT_CNT_LIMIT (100) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define RECY_CNT_LIMIT (10000) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define OVER_VOLT_RECY_CNT_LIMIT (100) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define LOWER_VOLT_RECY_CNT_LIMIT (100) + +/**< Over current protection */ +/**< Over current trigger value (A) when in level 1. */ +#define PROT_OVER_CURR_POW_DN1 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 2. */ +#define PROT_OVER_CURR_POW_DN2 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 3. */ +#define PROT_OVER_CURR_POW_DN3 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 4. */ +#define PROT_OVER_CURR_POW_OFF (2.0f * PROT_MOTOR_RATED_CURR) +#define PROT_OVER_CURR_RECY_DELTA (0.0035f) /**< Current gap (A) when recovers from protection status. */ +#define PROT_OVER_CURR_LIMIT1_TIME_SEC (30.0f) /**< 20% overload can last maximum time: 30 sec. */ +#define PROT_OVER_CURR_LIMIT2_TIME_SEC (10.0f) /**< 20% overload can last maximum time: 10 sec. */ +#define PROT_OVER_CURR_LIMIT3_TIME_SEC (2.0f) /**< 20% overload can last maximum time: 2 sec. */ + +/**< Over voltage protection */ +#define PROT_OVER_VOLT_BRK_ON1 (15.0f) /**< Over dc-link voltage trigger value (V) when in level 1. */ +#define PROT_OVER_VOLT_BRK_ON2 (16.0f) /**< Over dc-link voltage trigger value (V) when in level 2. */ +#define PROT_OVER_VOLT_BRK_ON3 (17.0f) /**< Over dc-link voltage trigger value (V) when in level 3. */ +#define PROT_OVER_VOLT_BRK_ALL (18.0f) /**< Over dc-link voltage trigger value (V) when in level 4. */ +#define PROT_OVER_VOLT_RECY_DELTA (0.5f) /**< Voltage gap (V) when recovers from protection status. */ +#define PROT_OVER_VOLT_LIMIT1_TIME_SEC (5.0f) /**< overload1 can last maximum time (sec). */ +#define PROT_OVER_VOLT_LIMIT2_TIME_SEC (3.0f) /**< overload2 can last maximum time (sec). */ +#define PROT_OVER_VOLT_LIMIT3_TIME_SEC (1.0f) /**< overload3 can last maximum time (sec). */ +#define PROT_POW_DN1_PCT (1.0f) /* Power down level in level 1. */ +#define PROT_POW_DN2_PCT (1.0f) /* Power down level in level 2. */ +#define PROT_POW_DN3_PCT (1.0f) /* Power down level in level 3. */ + +/**< Conduction duty needs to be calibrated with the power of the brake loop. */ +#define PROT_OVER_VOLT_BRK_DUTY1 (0.25f) /**< Conduction duty of the brake loop in level 1. */ +#define PROT_OVER_VOLT_BRK_DUTY2 (0.50f) /**< Conduction duty of the brake loop in level 2. */ +#define PROT_OVER_VOLT_BRK_DUTY3 (0.75f) /**< Conduction duty of the brake loop in level 3. */ +#define PROT_OVER_VOLT_BRK_DUTY4 (1.00f) /**< Conduction duty of the brake loop in level 4. */ + +/**< Lower voltage protection */ +#define PROT_LOWER_VOLT_POW_DN1 (10.3f) /**< Lower dc-link voltage trigger value (V) when in level 1. */ +#define PROT_LOWER_VOLT_POW_DN2 (10.0f) /**< Lower dc-link voltage trigger value (V) when in level 2. */ +#define PROT_LOWER_VOLT_POW_DN3 (9.0f) /**< Lower dc-link voltage trigger value (V) when in level 3. */ +#define PROT_LOWER_VOLT_POW_OFF (8.0f) /**< Lower dc-link voltage trigger value (V) when in level 4. */ +#define PROT_LOWER_VOLT_RECY_DELTA (0.5f) /**< Voltage gap (A) when recovers from protection status. */ +#define PROT_LOWER_VOLT_LIMIT1_TIME_SEC (3.0f) /**< 20% overload can last maximum time: 3 sec. */ +#define PROT_LOWER_VOLT_LIMIT2_TIME_SEC (3.0f) /**< 20% overload can last maximum time: 3 sec. */ +#define PROT_LOWER_VOLT_LIMIT3_TIME_SEC (3.0f) /**< 20% overload can last maximum time: 3 sec. */ + +/**< Over IPM temperature protection */ +#define PROT_OVER_IPM_TEMP_POW_DN1 (40.0f) /**< Over IPM temperature trigger value (celsius) when in level 1. */ +#define PROT_OVER_IPM_TEMP_POW_DN2 (42.0f) /**< Over IPM temperature trigger value (celsius) when in level 2. */ +#define PROT_OVER_IPM_TEMP_POW_DN3 (44.0f) /**< Over IPM temperature trigger value (celsius) when in level 3. */ +#define PROT_OVER_IPM_TEMP_POW_OFF (45.0f) /**< Over IPM temperature trigger value (celsius) when in level 4. */ +#define PROT_OVER_IPM_TEMP_RECY_DELTA (0.5f) /**< Temperature gap (celsius) when recovers from protection status. */ +#define PROT_OVER_TEMP_LIMIT1_TIME_SEC (10.0f) /**< 20% overload can last maximum time: 10 sec. */ +#define PROT_OVER_TEMP_LIMIT2_TIME_SEC (10.0f) /**< 20% overload can last maximum time: 10 sec. */ +#define PROT_OVER_TEMP_LIMIT3_TIME_SEC (10.0f) /**< 20% overload can last maximum time: 10 sec. */ + +/**< Motor stalling detection */ +/**< Feedback current higher than this value triggers fault. (A). */ +#define PROT_STALLING_CURR_AMP_LIMIT (PROT_MOTOR_RATED_CURR * 1.2f) +/**< Feedback speed lower than this value triggers fault (Hz). */ +#define PROT_STALLING_SPD_LIMIT 30 +/**< The threshold time that current and speed feedback over ranges (s). */ +#define PROT_STALLING_TIME_LIMIT (1.5f) + +/**< Current out-of-balance detection */ +#define UNBAL_STARTUP_DETECT_TIME_SEC (0.5f) /**< Start detection delay (s) */ +#define UNBAL_PROT_CNT_LIMIT (50000) +#define UNBAL_RECY_CNT_LIMIT (50000) +#define UNBAL_CURRENT_DELTA (1.5f) /**< Used to detect zero crossings in the current cycle. */ +#define UNBAL_DEGREE_LIMIT (0.035f) /**< unbalance degree threshold. */ +#define UNBAL_DEGREE_AVG_FLT_COFFI (0.03f) /**< unbalance degree average Filter coefficient. */ + +/**< Position sensor detection */ +#define POS_SNSR_FAULT_CNT (100000) /* Number of consecutive fault times */ +#define POS_SNSR_RECY_CNT (10000) /* Number of consecutive communication loss times */ + +/**< Phase winding integrity detection */ +#define OPEN_PHS_CURR_THR_A (0.1f) /* Threshold to determine open phase no current (A). */ + +/**< Position sensor zero position detection */ +#define POS_SNSR_CALIBR_UD_REF (15.0f) /* V */ +#define POS_SNSR_CALIBR_UD_SLOPE (15.0f) /* (V/S) */ +#define POS_SNSR_CALIBR_DETECT_TIME (2.0f) /* S */ +#define POS_SNSR_RECORD_TIMES (2000) /* 2000 * TS */ + +/* Multi-cycle mode: > 1; One-cycle mode: < 0.5 */ +#define POS_SNSR_IPD_INJ_PERIOD (4) + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c new file mode 100644 index 00000000..da4e56f8 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c @@ -0,0 +1,267 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.c + * @author MCU Algorithm Team + * @brief This file contains current protecion api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_curr_prot.h" +#include "mcs_math.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over current protection function. + * @param ocp Over current protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OCP_Init(OCP_Handle *ocp, float ts) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ocp->ts = ts; + OCP_Clear(ocp); + + ocp->protCntLimit = PROT_CNT_LIMIT; + ocp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring four levels of current protection thresholds. */ + ocp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_CURR_POW_DN1; + ocp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_CURR_POW_DN2; + ocp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_CURR_POW_DN3; + ocp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_CURR_POW_OFF; + /* Configure the protection limit time. */ + ocp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_CURR_LIMIT1_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_CURR_LIMIT2_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_CURR_LIMIT3_TIME_SEC; + ocp->recyDelta = PROT_OVER_CURR_RECY_DELTA; +} + +/** + * @brief Over current protection detection. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + /* Calculate current amplitude. */ + ocp->currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + + /* Check if value goes over threshold for continuous cycles. */ + if (ocp->currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0]) { + ocp->protCnt = 0; + return; + } + + if (ocp->protCnt < ocp->protCntLimit) { + ocp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_3] && ocp->protLevel < PROT_LEVEL_4) { + ocp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_2] && ocp->protLevel < PROT_LEVEL_3) { + ocp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_1] && ocp->protLevel < PROT_LEVEL_2) { + ocp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_0] && ocp->protLevel < PROT_LEVEL_1) { + ocp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } +} + +/** + * @brief Over current protection execution. + * @param ocp Over current protection handle. + * @param idqRef DQ-axis current references. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(idqRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + + float id = idqRef->d; + float iq = idqRef->q; + float idqAmp = ocp->currAmp; + /* According to protect level, take corresponding action. */ + switch (ocp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + idqRef->d = 0.0f; + idqRef->q = 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_2]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_1]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_0]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } +} + +/** + * @brief Over current protection recovery. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @retval None. + */ +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overCurrErr) { + return; + } + + /* Calculate current amplitude. */ + float currAmp = ocp->currAmp; + + /* According to protection level, take corresponding recovery action. */ + switch (ocp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_3] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_3; + ocp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_2] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_2; + ocp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_1] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_1; + ocp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + } + } + break; + + /* level 0 */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overCurrErr = 0; + break; + + default: + break; + } +} + +/** + * @brief Over current protection error status clear. + * @param ocp Over current protection handle. + * @retval None. + */ +void OCP_Clear(OCP_Handle *ocp) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* Clear the history value. */ + ocp->protCnt = 0; + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + ocp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h new file mode 100644 index 00000000..e9916fe4 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h @@ -0,0 +1,52 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.h + * @author MCU Algorithm Team + * @brief This file contains current protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_CURR_PROT_H +#define McuMagicTag_MCS_CURR_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_typedef.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float currAmp; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OCP_Handle; + +void OCP_Init(OCP_Handle *ocp, float ts); +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq); +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr); +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus); +void OCP_Clear(OCP_Handle *ocp); + +#endif diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c new file mode 100644 index 00000000..b0541a2e --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c @@ -0,0 +1,495 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.c + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection api declaration. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_dc_volt_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over dc-link voltage protection function. + * @param ovp Over dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OVP_Init(OVP_Handle *ovp, float ts) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ovp->ts = ts; + OVP_Clear(ovp); + ovp->protCntLimit = PROT_CNT_LIMIT; + ovp->recyCntLimit = OVER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of overvoltage protection thresholds. */ + ovp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_VOLT_BRK_ON1; + ovp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_VOLT_BRK_ON2; + ovp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_VOLT_BRK_ON3; + ovp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_VOLT_BRK_ALL; + /* Configure the protection limit time. */ + ovp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_VOLT_LIMIT1_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_VOLT_LIMIT2_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_VOLT_LIMIT3_TIME_SEC; + ovp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Initilization lower dc-link voltage protection function. + * @param lvp Lower dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void LVP_Init(LVP_Handle *lvp, float ts) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + + lvp->ts = ts; + LVP_Clear(lvp); + + lvp->protCntLimit = PROT_CNT_LIMIT; + lvp->recyCntLimit = LOWER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of lower voltage protection thresholds. */ + lvp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_LOWER_VOLT_POW_DN1; + lvp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_LOWER_VOLT_POW_DN2; + lvp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_LOWER_VOLT_POW_DN3; + lvp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_LOWER_VOLT_POW_OFF; + /* Configure the protection limit time. */ + lvp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_LOWER_VOLT_LIMIT1_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_LOWER_VOLT_LIMIT2_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_LOWER_VOLT_LIMIT3_TIME_SEC; + lvp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Over dc-link voltage protection detection. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0]) { + ovp->protCnt = 0; + return; + } + + if (ovp->protCnt < ovp->protCntLimit) { + ovp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_3] && ovp->protLevel < PROT_LEVEL_4) { + ovp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_2] && ovp->protLevel < PROT_LEVEL_3) { + ovp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_1] && ovp->protLevel < PROT_LEVEL_2) { + ovp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_0] && ovp->protLevel < PROT_LEVEL_1) { + ovp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } +} + +/** + * @brief Lower dc-link voltage protection detection. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0]) { + lvp->protCnt = 0; + return; + } + + if (lvp->protCnt < lvp->protCntLimit) { + lvp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_3] && lvp->protLevel < PROT_LEVEL_4) { + lvp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_2] && lvp->protLevel < PROT_LEVEL_3) { + lvp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_1] && lvp->protLevel < PROT_LEVEL_2) { + lvp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_0] && lvp->protLevel < PROT_LEVEL_1) { + lvp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } +} + +/** + * @brief Over dc-link voltage protection execution. + * @param ovp Over dc-link voltage protection handle. + * @param duty Brake loop output duty (0-1). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(duty != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (ovp->protLevel) { + /* level 4: brake loop duty maximum. */ + case PROT_LEVEL_4: + *duty = PROT_OVER_VOLT_BRK_DUTY4; + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + break; + + /* level 3: brake loop duty level 3. */ + case PROT_LEVEL_3: + *duty = PROT_OVER_VOLT_BRK_DUTY2; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_2]) { + *duty = PROT_OVER_VOLT_BRK_DUTY3; + } + break; + + /* level 2: brake loop duty level 2. */ + case PROT_LEVEL_2: + *duty = PROT_OVER_VOLT_BRK_DUTY1; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_1]) { + *duty = PROT_OVER_VOLT_BRK_DUTY2; + } + break; + + /* level 1: brake loop duty level 1. */ + case PROT_LEVEL_1: + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_0]) { + *duty = PROT_OVER_VOLT_BRK_DUTY1; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection execution. + * @param lvp Lower dc-link voltage protection handle. + * @param spdRef Speed Reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (lvp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + *spdRef *= PROT_POW_DN1_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_0]) { + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection recovery. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (ovp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_3] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_3; + ovp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is less than threshold 2, level-2 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_2] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_2; + ovp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is less than threshold 1, level-1 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_1] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_1; + ovp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is less than threshold 0, level-0 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection recovery. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.lowerVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (lvp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the dc-link voltage is greater than threshold 3, level-3 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_3] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_3; + lvp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is greater than threshold 2, level-2 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_2] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_2; + lvp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is greater than threshold 1, level-1 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_1] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_1; + lvp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is greater than threshold 0, level-0 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.lowerVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection error status clear. + * @param ovp Over voltage protection handle. + * @retval None. + */ +void OVP_Clear(OVP_Handle *ovp) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* Clear the history value. */ + ovp->protCnt = 0; + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + ovp->timer = 0.0f; +} + +/** + * @brief Lower dc-link voltage protection error status clear. + * @param lvp Lower voltage protection handle. + * @retval None. + */ +void LVP_Clear(LVP_Handle *lvp) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* Clear the history value. */ + lvp->protCnt = 0; + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + lvp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h new file mode 100644 index 00000000..0435156a --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h @@ -0,0 +1,69 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.h + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_DC_VOLT_PROT_H +#define McuMagicTag_MCS_DC_VOLT_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low voltage level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OVP_Handle; + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from high voltage level to low. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} LVP_Handle; + +void OVP_Init(OVP_Handle *ovp, float ts); +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr); +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Clear(OVP_Handle *ovp); + +void LVP_Init(LVP_Handle *lvp, float ts); +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr); +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Clear(LVP_Handle *lvp); + +#endif diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c new file mode 100644 index 00000000..9dee4d2d --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c @@ -0,0 +1,112 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.c + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_motor_stalling.h" +#include "mcs_prot_user_config.h" +#include "mcs_math.h" +#include "mcs_math_const.h" +#include "mcs_assert.h" + +/** + * @brief Initilization motor stalling protection function. + * @param stall Motor stalling handle. + * @param ts Ctrl period (s). + * @param currLimit The current amplitude that triggers fault. (A). + * @param spdLimit The speed amplitude that triggers fault. (Hz). + * @param timeLimit The threshold time that current amplitude over the limit (s). + * @retval None. + */ +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + MCS_ASSERT_PARAM(currLimit > 0.0f); + MCS_ASSERT_PARAM(spdLimit > 0.0f); + MCS_ASSERT_PARAM(timeLimit > 0.0f); + /* Configuring parameters for stalling detection. */ + stall->ts = ts; + /* Current threshold and speed threshold for stalling fault. */ + stall->currAmpLimit = currLimit; + stall->spdLimit = spdLimit; + stall->timeLimit = timeLimit; + stall->timer = 0.0f; +} + +/** + * @brief Motor stalling detection. + * @param stall Motor stalling handle. + * @param motorErrStatus Motor error status. + * @param spd Speed feedback (Hz). + * @param idq Dq-axis current feedback (A). + * @retval None. + */ +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(Abs(spd) >= 0.0f); + /* Calculate current amplitude. */ + float currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + float spdAbs = Abs(spd); + /* Check if value goes over threshold for continuous cycles. */ + if (currAmp < stall->currAmpLimit || spdAbs > stall->spdLimit) { + stall->timer = 0.0f; + return; + } + /* Time accumulation. */ + if (stall->timer < stall->timeLimit) { + stall->timer += stall->ts; + return; + } + motorErrStatus->Bit.motorStalling = 1; +} + +/** + * @brief Motor stalling protection execution. + * @param motorErrStatus Motor error status. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + if (motorErrStatus->Bit.motorStalling == 0) { + return; + } + + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + return; +} + +/** + * @brief Motor stalling protection error status clear. + * @param stall Motor stalling handle. + * @retval None. + */ +void STP_Clear(STP_Handle *stall) +{ + MCS_ASSERT_PARAM(stall != NULL); + stall->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h new file mode 100644 index 00000000..a1d1e4be --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h @@ -0,0 +1,45 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.h + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_MOTOR_STALLING_PROT_H +#define McuMagicTag_MCS_MOTOR_STALLING_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" +#include "mcs_typedef.h" + +typedef struct { + float currAmpLimit; /**< Feedback current higher than this value triggers fault. (A). */ + float spdLimit; /**< Feedback speed lower than this value triggers fault (Hz). */ + float timeLimit; /**< The threshold time that current and speed feedback over ranges (s). */ + float timer; /**< Timer to get speed and current over range time. */ + float ts; /**< Ctrl period (s). */ +} STP_Handle; + +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit); +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq); +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr); +void STP_Clear(STP_Handle *stall); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c new file mode 100644 index 00000000..184ba4a3 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c @@ -0,0 +1,262 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.c + * @author MCU Algorithm Team + * @brief This file contains over temperature protection api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_temp_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over temperation protection function. + * @param otp Over temperature protection handle. + * @param ts Ctrl period. + * @retval None. + */ +void OTP_Init(OTP_Handle *otp, float ts) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + otp->ts = ts; + otp->protCntLimit = PROT_CNT_LIMIT; + otp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring the temperature protection threshold. */ + otp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_IPM_TEMP_POW_DN1; + otp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_IPM_TEMP_POW_DN2; + otp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_IPM_TEMP_POW_DN3; + otp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_IPM_TEMP_POW_OFF; + /* Configuring the protection limiting time. */ + otp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_TEMP_LIMIT1_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_TEMP_LIMIT2_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_TEMP_LIMIT3_TIME_SEC; + otp->recyDelta = PROT_OVER_IPM_TEMP_RECY_DELTA; + OTP_Clear(otp); +} + +/** + * @brief Over temperatre protection detection. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0]) { + otp->protCnt = 0; + ClearBit(&motorErrStatus->all, protBit); + return; + } + + if (otp->protCnt < otp->protCntLimit) { + otp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_3] && otp->protLevel < PROT_LEVEL_4) { + otp->protLevel = PROT_LEVEL_4; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_2] && otp->protLevel < PROT_LEVEL_3) { + otp->protLevel = PROT_LEVEL_3; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_1] && otp->protLevel < PROT_LEVEL_2) { + otp->protLevel = PROT_LEVEL_2; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_0] && otp->protLevel < PROT_LEVEL_1) { + otp->protLevel = PROT_LEVEL_1; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } +} + +/** + * @brief Over temperature protection execution. + * @param otp Over temperature protection handle. + * @param spdRef Speed reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (otp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + /* Reducte motor speed to level 2 */ + *spdRef *= PROT_POW_DN1_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + case PROT_LEVEL_1: + /* Reducte motor speed to level 0 */ + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_0]) { + /* level 1: derate speed reference. */ + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection recovery. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param temp Temperature (celsius). + * @retval None. + */ +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* If not under error state, just return without any operation. */ + if (otp->protLevel == PROT_LEVEL_0) { + motorErrStatus->all &= (~(1 >> protBit)); + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (otp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the temperature is less than threshold 3, level-3 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_3] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_3; + otp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the temperature is less than threshold 2, level-2 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_2] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_2; + otp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the temperature is less than threshold 1, level-1 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_1] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_1; + otp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the temperature is less than threshold 0, level-0 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + } + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection error status clear. + * @param otp Over temperature protection handle. + * @retval None. + */ +void OTP_Clear(OTP_Handle *otp) +{ + MCS_ASSERT_PARAM(otp != NULL); + /* Clear the history value. */ + otp->protCnt = 0; + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + otp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h new file mode 100644 index 00000000..2b9d99a7 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h @@ -0,0 +1,49 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.h + * @author MCU Algorithm Team + * @brief his file contains over temperature protection api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_TEMP_PROT_H +#define McuMagicTag_MCS_TEMP_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float ts; + float timer; + PROT_Level protLevel; +} OTP_Handle; + +void OTP_Init(OTP_Handle *otp, float ts); +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr); +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Clear(OTP_Handle *otp); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/readme.md b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/readme.md new file mode 100644 index 00000000..98b2a068 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/readme.md @@ -0,0 +1,10 @@ +# pmsm_sensorless_2shunt_foc + +**【功能描述】** ++ 基于ECMCU105H/ECBMCU201MPC单板的单电机双电阻采样Foc应用 + +**【环境要求】** ++ 所有单板电源改制为演示用的12V低压,电机选用Gimbal GBM2804H-100T + +**【IDE配置方法】** ++ chipConfig中的Sample栏目里面选中pmsm sensorless 2shunt foc示例,然后点击生成代码即可 diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c new file mode 100644 index 00000000..9fc8afac --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c @@ -0,0 +1,144 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.c + * @author MCU Algorithm Team + * @brief This file provides carrier interrupt application for motor control. + */ + +#include "mcs_carrier.h" +#include "mcs_math.h" +#include "typedefs.h" +#include "mcs_assert.h" +#include "mcs_user_config.h" +#include "mcs_ctlmode_config.h" + +/** + * @brief Synchronous rotation coordinate system angle. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_SyncCoorAngle(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* Synchronous rotation coordinate system angle. */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + /* Current ramp angle is 0. */ + if (mtrCtrl->startup.stage == STARTUP_STAGE_CURR) { + mtrCtrl->axisAngle = 0; + } else if (mtrCtrl->startup.stage == STARTUP_STAGE_SPD) { /* IF control phase angle self-addition. */ + mtrCtrl->axisAngle = IF_CurrAngleCalc(&mtrCtrl->ifCtrl, mtrCtrl->spdRefHz); + } else if (mtrCtrl->startup.stage == STARTUP_STAGE_SWITCH) { /* Switch Angle */ + mtrCtrl->axisAngle = mtrCtrl->smo.elecAngle; + } + break; + + case FSM_RUN: + mtrCtrl->axisAngle = mtrCtrl->smo.elecAngle; + break; + + default: + mtrCtrl->axisAngle = 0; + break; + } +} + +/** + * @brief PWM waveform setting and sampling point setting for a single resistors and dual resistors. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_PwmAdcSet(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SampleMode sampleMode = mtrCtrl->sampleMode; + /* Set the duty cycle according to the sampling mode. */ + if (sampleMode == DUAL_RESISTORS) { + SVPWM_Exec(&mtrCtrl->sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvw); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvw, &mtrCtrl->dutyUvw); + } else if (sampleMode == SINGLE_RESISTOR) { + R1SVPWM_Exec(&mtrCtrl->r1Sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + /* The ADC sampling point position needs to be set based on the phase shift of a single resistors. */ + mtrCtrl->setADCTriggerTimeCb(mtrCtrl->r1Sv.samplePoint[0] * mtrCtrl->aptMaxcntCmp, \ + mtrCtrl->r1Sv.samplePoint[1] * mtrCtrl->aptMaxcntCmp); + } +} + +/** + * @brief Carrier interrupt function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UvwAxis *currUvw = &mtrCtrl->currUvw; + AlbeAxis *currAlbe = &mtrCtrl->iabFbk; + AlbeAxis *vab = &mtrCtrl->vabRef; + SampleMode sampleMode = mtrCtrl->sampleMode; + /* sample mode verify */ + if (sampleMode > SINGLE_RESISTOR || mtrCtrl->setADCTriggerTimeCb == NULL) { + return; + } + /* param verify */ + if (mtrCtrl->setPwmDutyCb == NULL || mtrCtrl->readCurrUvwCb == NULL) { + return; + } + /* Read the three-phase current value. */ + mtrCtrl->readCurrUvwCb(currUvw); + /* Clark Calc */ + ClarkeCalc(currUvw, currAlbe); + /* Smo observation */ + if (mtrCtrl->obserType == FOC_OBSERVERTYPE_SMO1TH) { + /* Smo observation */ + FOSMO_Exec(&mtrCtrl->smo, currAlbe, vab, mtrCtrl->spdRefHz); + } else if (mtrCtrl->obserType == FOC_OBSERVERTYPE_SMO4TH) { + /* Smo4th observation */ + SMO4TH_Exec(&mtrCtrl->smo4th, currAlbe, vab); + mtrCtrl->smo.spdEst = mtrCtrl->smo4th.spdEst; + mtrCtrl->smo.elecAngle = mtrCtrl->smo4th.elecAngle; + } + /* Synchronization angle */ + MCS_SyncCoorAngle(mtrCtrl); + + /* Park transformation */ + ParkCalc(currAlbe, mtrCtrl->axisAngle, &mtrCtrl->idqFbk); + + /* statemachine */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + case FSM_RUN: + CURRCTRL_Exec(&mtrCtrl->currCtrl, &mtrCtrl->vdqRef, mtrCtrl->smo.spdEst, 0); + InvParkCalc(&mtrCtrl->vdqRef, mtrCtrl->axisAngle, vab); + MCS_PwmAdcSet(mtrCtrl); + break; + + case FSM_CAP_CHARGE: + case FSM_CLEAR: + case FSM_IDLE: + mtrCtrl->smo4th.spdEst = 0.0f; + break; + + default: + vab->alpha = 0.0f; + vab->beta = 0.0f; + MCS_PwmAdcSet(mtrCtrl); + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c new file mode 100644 index 00000000..79bc3949 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c @@ -0,0 +1,950 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.c + * @author MCU Algorithm Team + * @brief This file provides motor application. + * @details Single FOC application based on the ECMCU105H/ECBMCU201MPC board + * 1) Motor model is Gimbal GBM2804H-100T. + * 2) Select the pmsm sensorless 2shunt foc example in the sample column + of chipConfig and click Generate Code. + * 3) It's power supply must be changed to 12V. + */ +#include "main.h" +#include "mcs_user_config.h" +#include "mcs_math.h" +#include "hmi_module.h" +#include "mcs_ctlmode_config.h" +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_math_const.h" +#include "mcs_motor_process.h" +#include "mcs_chip_config.h" +#include + +/*------------------------------- Macro Definition -----------------------------------------------*/ +#define US_PER_MS 1000 +#define ANGLE_RANGE_ABS 65536 +#define ANGLE_360_F 65536.0f /* 0 - 65536 indicates 0 to 360. */ +#define APT_FULL_DUTY 1.0f +#define TEMP_3 3.0f +#define TEMP_15 15.0f +#define TEMP_30 30.0f +#define TEMP_45 45.0f +#define TEMP_60 60.0f +#define TEMP_RES_15 78.327f +#define TEMP_RES_30 36.776f +#define TEMP_RES_45 18.301f +#define TEMP_RES_60 9.607f +#define CNT_10 10 +#define CNT_5000 5000 +#define LEVEL_4 4 +#define MOTOR_START_DELAY 2 +#define ADC_READINIT_DELAY 1 +#define ADC_READINIT_TIMES 20 +#define ADC_TRIMVALUE_MIN 1800.0f +#define ADC_TRIMVALUE_MAX 2200.0f +/*------------------------------- Param Definition -----------------------------------------------*/ +/* Motor parameters. */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift */ +static MOTOR_Param g_motorParam = MOTORPARAM_DEFAULTS; +static APT_RegStruct* g_apt[PHASE_MAX_NUM] = {APT_U, APT_V, APT_W}; +/* Motor control handle */ +static MTRCTRL_Handle g_mc = {0}; + +/* Motor speed loop PI param. */ +static void SPDCTRL_InitWrapper(SPDCTRL_Handle *spdHandle, float ts) +{ + /* Speed loop param assignment. */ + PI_Param spdPi = { + .kp = SPD_KP, + .ki = SPD_KI, + .lowerLim = SPD_LOWERLIM, + .upperLim = SPD_UPPERLIM, + }; + /* Speed loop param init. */ + SPDCTRL_Init(spdHandle, &g_motorParam, spdPi, ts); +} + +/* Motor current Loop PI param. */ +static void CURRCTRL_InitWrapper(CURRCTRL_Handle *currHandle, DqAxis *idqRef, DqAxis *idqFbk, float ts) +{ + /* Axis-D current loop param assignment. */ + PI_Param dCurrPi = { + .kp = CURRDAXIS_KP, + .ki = CURRDAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Axis-Q current loop param assignment. */ + PI_Param qCurrPi = { + .kp = CURRQAXIS_KP, + .ki = CURRQAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Current loop param init. */ + CURRCTRL_Init(currHandle, &g_motorParam, idqRef, idqFbk, dCurrPi, qCurrPi, ts); +} + +/* First order smo param. */ +static void FOSMO_InitWrapper(FOSMO_Handle *fosmo, float ts) +{ + /* Smo param assignment. */ + FOSMO_Param fosmoParam = { + .gain = FOSMO_GAIN, + .lambda = FOSMO_LAMBDA, + .fcEmf = FOSMO_EMF_CUTOFF_FREQ, + .fcLpf = SPEED_FILTER_CUTOFF_FREQUENCY, + .pllBdw = FOSMO_PLL_BDW, + }; + /* Init smo param. */ + FOSMO_Init(fosmo, fosmoParam, &g_motorParam, ts); +} + +/* Smo4th param. */ +static void SMO4TH_InitWrapper(SMO4TH_Handle *smo4TH) +{ + /* Smo4th param assignment. */ + SMO4TH_Param smo4thParam = { + .kd = SMO4TH_KD, + .kq = SMO4TH_KQ, + .pllBdw = SMO4TH_PLL_BDW, + .fcLpf = SMO4TH_SPD_FILTER_CUTOFF_FREQ, + }; + /* Init smo param. */ + SMO4TH_Init(smo4TH, smo4thParam, &g_motorParam, CTRL_CURR_PERIOD); +} + +/*------------------------------- Function Definition -----------------------------------------------*/ +/** + * @brief Initialzer of system tick. + * @param mtrCtrl Motor control struct handle. + * @retval None. + */ +static void TimerTickInit(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysTickCnt = 0; + mtrCtrl->msTickNum = US_PER_MS / SYSTICK_PERIOD_US; + mtrCtrl->capChargeTickNum = (INV_CAP_CHARGE_MS * US_PER_MS / SYSTICK_PERIOD_US); +} + +/** + * @brief Init motor control task. + * @retval None. + */ +static void TSK_Init(void) +{ + g_mc.motorStateFlag = 0; + g_mc.uartHeartDetCnt = 0; + g_mc.uartTimeStamp = 0; + g_mc.stateMachine = FSM_IDLE; + g_mc.currCtrlPeriod = CTRL_CURR_PERIOD; /* Init current controller */ + g_mc.aptMaxcntCmp = g_apt0.waveform.timerPeriod; + g_mc.sampleMode = DUAL_RESISTORS; + g_mc.obserType = FOC_OBSERVERTYPE_SMO4TH; /* Init foc observe mode */ + g_mc.controlMode = FOC_CONTROLMODE_SPEED; /* Init motor control mode */ + g_mc.adcCurrCofe = ADC_CURR_COFFI; + g_mc.spdAdjustMode = CUST_SPEED_ADJUST; + g_mc.uartConnectFlag = DISCONNECT; + g_mc.spdCmdHz = USER_MIN_SPD_HZ; /* Motor initialization speed */ + + g_mc.adc0Compensate = ADC0COMPENSATE; /* Phase-u current init adc shift trim value */ + g_mc.adc1Compensate = ADC1COMPENSATE; /* Phase-w current init adc shift trim value */ + + IF_Init(&g_mc.ifCtrl, CTRL_IF_CURR_AMP_A, USER_CURR_SLOPE, CTRL_SYSTICK_PERIOD, CTRL_CURR_PERIOD); + RMG_Init(&g_mc.spdRmg, CTRL_SYSTICK_PERIOD, USER_SPD_SLOPE); /* Init speed slope */ + MtrParamInit(&g_mc.mtrParam, g_motorParam); + + TimerTickInit(&g_mc); + if (g_mc.sampleMode == DUAL_RESISTORS) { + SVPWM_Init(&g_mc.sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3); /* Dual resistors SVPWM init. */ + } else if (g_mc.sampleMode == SINGLE_RESISTOR) { + /* Single resistor SVPWM init. */ + R1SVPWM_Init(&g_mc.r1Sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3, SAMPLE_POINT_SHIFT, SAMPLE_WINDOW_DUTY); + } + + SPDCTRL_InitWrapper(&g_mc.spdCtrl, CTRL_SYSTICK_PERIOD); + CURRCTRL_InitWrapper(&g_mc.currCtrl, &g_mc.idqRef, &g_mc.idqFbk, CTRL_CURR_PERIOD); + FOSMO_InitWrapper(&g_mc.smo, CTRL_CURR_PERIOD); + SMO4TH_InitWrapper(&g_mc.smo4th); + + STARTUP_Init(&g_mc.startup, USER_SWITCH_SPDBEGIN_HZ, USER_SWITCH_SPDBEGIN_HZ + TEMP_3); + + MotorProt_Init(&g_mc.prot); /* Init protect state comond */ + OCP_Init(&g_mc.prot.ocp, CTRL_CURR_PERIOD); + OVP_Init(&g_mc.prot.ovp, CTRL_SYSTICK_PERIOD); + LVP_Init(&g_mc.prot.lvp, CTRL_SYSTICK_PERIOD); + OTP_Init(&g_mc.prot.otp, CTRL_SYSTICK_PERIOD); + STP_Init(&g_mc.prot.stall, CTRL_SYSTICK_PERIOD, PROT_STALLING_CURR_AMP_LIMIT, + PROT_STALLING_SPD_LIMIT, PROT_STALLING_TIME_LIMIT); +} + +/** + * @brief Clear historical values of all controller before start-up. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ClearBeforeStartup(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* The initial angle is 0. */ + mtrCtrl->axisAngle = 0; + + mtrCtrl->spdRefHz = 0.0f; + /* The initial dq-axis reference current is 0. */ + mtrCtrl->idqRef.d = 0.0f; + mtrCtrl->idqRef.q = 0.0f; + + mtrCtrl->vdqRef.d = 0.0f; + mtrCtrl->vdqRef.q = 0.0f; + /* Clear Duty Cycle Value. The initial duty cycle is 0.5. */ + mtrCtrl->dutyUvwLeft.u = 0.5f; + mtrCtrl->dutyUvwLeft.v = 0.5f; + mtrCtrl->dutyUvwLeft.w = 0.5f; + mtrCtrl->dutyUvwRight.u = 0.5f; + mtrCtrl->dutyUvwRight.v = 0.5f; + mtrCtrl->dutyUvwRight.w = 0.5f; + + mtrCtrl->prot.motorErrStatus.all = 0x00; + + RMG_Clear(&mtrCtrl->spdRmg); /* Clear the history value of speed slope control */ + CURRCTRL_Clear(&mtrCtrl->currCtrl); + IF_Clear(&mtrCtrl->ifCtrl); + SPDCTRL_Clear(&mtrCtrl->spdCtrl); + FOSMO_Clear(&mtrCtrl->smo); + SMO4TH_Clear(&mtrCtrl->smo4th); + STARTUP_Clear(&mtrCtrl->startup); + R1SVPWM_Clear(&mtrCtrl->r1Sv); + + OTP_Clear(&mtrCtrl->prot.otp); + OCP_Clear(&mtrCtrl->prot.ocp); + OVP_Clear(&mtrCtrl->prot.ovp); + LVP_Clear(&mtrCtrl->prot.lvp); +} + +/** + * @brief To set the comparison value of the IGBT single-resistance ADC sampling trigger position. + * @param aptx The APT register struct handle. + * @param cntCmpA A Count compare reference of time-base counter. + * @param cntCmpB B Count compare reference of time-base counter. + * @param maxCntCmp Maximum Comparison Value + * @retval None. + */ +static void MCS_SetAdcCompareR1(APT_RegStruct *aptx, unsigned short cntCmpA, + unsigned short cntCmpB, unsigned short maxCntCmp) +{ + unsigned short tmp; + /* Sets the A Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpA), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_A, tmp); + /* Sets the B Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpB), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_B, tmp); +} + +/** + * @brief Open the three-phase lower pipe. + * @param aptAddr Three-phase APT address pointer. + * @param maxDutyCnt Max duty count. + * @retval None. + */ +static void AptTurnOnLowSidePwm(APT_RegStruct **aptAddr, unsigned short maxDutyCnt) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(maxDutyCnt != 0); + unsigned short dutyCnt; + dutyCnt = (unsigned short)(maxDutyCnt * APT_FULL_DUTY); + /* Open the three-phase lower pipe */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_C, dutyCnt); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_D, dutyCnt); + } +} + +/** + * @brief Enable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputEnable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Enable three-phase pwm output */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_UNSET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_UNSET; + } +} + +/** + * @brief Disable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputDisable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Disable three-phase pwm output. */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_SET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_SET; + DCL_APT_ForcePWMOutputLow(aptx); + } +} + +/** + * @brief Smo IF angle difference calculation. + * @param smoElecAngle Smo electrical angle. + * @param ifCtrlAngle IF control angle. + * @retval signed short angle difference. + */ +static float SmoIfAngleDiffCalc(float smoElecAngle, float ifCtrlAngle) +{ + float diff = AngleSub(smoElecAngle, ifCtrlAngle); + /* Smo IF angle difference calculation */ + return diff; +} + +/** + * @brief Construct a new mcs startupswitch object. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_StartupSwitch(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + STARTUP_Handle *startup = &mtrCtrl->startup; + DqAxis *idqRef = &mtrCtrl->idqRef; + float iftargetAmp = mtrCtrl->ifCtrl.targetAmp; + float spdRefHz = mtrCtrl->spdRefHz; + + switch (startup->stage) { + case STARTUP_STAGE_CURR: + if (mtrCtrl->ifCtrl.curAmp >= iftargetAmp) { + /* Stage change */ + idqRef->q = iftargetAmp; + startup->stage = STARTUP_STAGE_SPD; + } else { + /* current amplitude increase */ + idqRef->q = IF_CurrAmpCalc(&mtrCtrl->ifCtrl); + spdRefHz = 0.0f; + } + break; + case STARTUP_STAGE_SPD: + /* current frequency increase */ + if (Abs(spdRefHz) >= startup->spdBegin) { + /* Stage change */ + startup->stage = STARTUP_STAGE_SWITCH; + TrigVal localTrigVal; + TrigCalc(&localTrigVal, SmoIfAngleDiffCalc(mtrCtrl->smo.elecAngle, mtrCtrl->ifCtrl.angle)); + idqRef->d = 0.0f; + mtrCtrl->spdCtrl.spdPi.integral = iftargetAmp * localTrigVal.cos; + } else { + /* Speed rmg */ + spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + } + break; + + case STARTUP_STAGE_SWITCH: + /* Switch from IF to SMO */ + spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + idqRef->q = SPDCTRL_Exec(&mtrCtrl->spdCtrl, mtrCtrl->spdRefHz, mtrCtrl->smo.spdEst); + /* Transitional stage, if current reference speed > critical speed, change to next stage */ + if (spdRefHz >= startup->spdBegin + TEMP_3) { + /* Stage change */ + mtrCtrl->stateMachine = FSM_RUN; + } + break; + + default: + break; + } + mtrCtrl->spdRefHz = spdRefHz; +} + +/** + * @brief Pre-processing of motor status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void MotorStatePerProc(SysStatusReg *statusReg, volatile FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* Get system status */ + if (SysIsError(statusReg)) { + *stateMachine = FSM_FAULT; + } + if (SysGetCmdStop(statusReg)) { + SysCmdStopClr(statusReg); + *stateMachine = FSM_STOP; + } +} + +/** + * @brief Check over current status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckOverCurrentState(SysStatusReg *statusReg, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check systerm error status */ + if (SysIsError(statusReg) == false) { + *stateMachine = FSM_IDLE; + } +} + +/** + * @brief Check bootstrap capacitor charge time. + * @param mtrCtrl The motor control handle. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckBootstrpCapChargeTime(MTRCTRL_Handle *mtrCtrl, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + mtrCtrl->sysTickCnt++; + /* check bootstrap capacitor charge time */ + if (mtrCtrl->sysTickCnt == mtrCtrl->capChargeTickNum) { + *stateMachine = FSM_CLEAR; + } +} + +/** + * @brief Check systerm cmd start signal. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckSysCmdStart(MTRCTRL_Handle *mtrCtrl, + APT_RegStruct **aptAddr, + SysStatusReg *statusReg, + FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check start cmd */ + if (SysGetCmdStart(statusReg)) { + SysRunningSet(statusReg); + SysCmdStartClr(statusReg); + mtrCtrl->sysTickCnt = 0; + *stateMachine = FSM_CAP_CHARGE; + /* Preparation for charging the bootstrap capacitor. */ + AptTurnOnLowSidePwm(aptAddr, mtrCtrl->aptMaxcntCmp); + /* Out put pwm */ + MotorPwmOutputEnable(aptAddr); + } +} + +/** + * @brief System timer tick task. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void TSK_SystickIsr(MTRCTRL_Handle *mtrCtrl, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + SysStatusReg *statusReg = &mtrCtrl->statusReg; + FsmState *stateMachine = &mtrCtrl->stateMachine; + mtrCtrl->msTickCnt++; + /* Pre-processing of motor status. */ + MotorStatePerProc(statusReg, stateMachine); + /* statemachine */ + switch (*stateMachine) { + case FSM_IDLE: + /* Set smo estimate speed before motor start-up */ + g_mc.smo.spdEst = 0.0f; + CheckSysCmdStart(mtrCtrl, aptAddr, statusReg, stateMachine); + break; + case FSM_CAP_CHARGE: + /* Bootstrap Capacitor Charging Timing */ + CheckBootstrpCapChargeTime(mtrCtrl, stateMachine); + break; + /* Clear parameter before start */ + case FSM_CLEAR: + ClearBeforeStartup(mtrCtrl); + *stateMachine = FSM_STARTUP; + break; + case FSM_STARTUP: + MCS_StartupSwitch(mtrCtrl); + break; + case FSM_RUN: + /* Speed ramp control */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + /* Speed loop control */ + mtrCtrl->idqRef.q = SPDCTRL_Exec(&mtrCtrl->spdCtrl, mtrCtrl->spdRefHz, mtrCtrl->smo.spdEst); + break; + case FSM_STOP: + mtrCtrl->spdRefHz = 0.0f; + MotorPwmOutputDisable(aptAddr); + SysRunningClr(statusReg); + *stateMachine = FSM_IDLE; + break; + case FSM_FAULT: /* Overcurrent state */ + CheckOverCurrentState(statusReg, stateMachine); + break; + default: + break; + } +} + +/** + * @brief Read the ADC initialize bias trim value. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void TrimInitAdcShiftValue(MTRCTRL_Handle *mtrCtrl) +{ + float adc0SampleTemp = 0.0f; /* Current bias value for temp store */ + float adc1SampleTemp = 0.0f; + float adc0TempSum = 0.0f; + float adc1TempSum = 0.0f; /* Current bias sum value for 20 times */ + float adcSampleTimes = 0.0f; /* ADC sample times */ + for (int i = 0; i < ADC_READINIT_TIMES; i++) { + adc0SampleTemp = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + adc1SampleTemp = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + BASE_FUNC_DELAY_US(200); /* 200 is delay count, delay 200us triger adc sampling */ + if (adc0SampleTemp > 1000.0f && adc1SampleTemp > 1000.0f) { + adcSampleTimes++; + adc0TempSum += adc0SampleTemp; + adc1TempSum += adc1SampleTemp; + } + } + if (adcSampleTimes < 1.0f) { + adcSampleTimes = 1.0f; /* Prevent divide-by-zero errors */ + } + adc0SampleTemp = adc0TempSum / adcSampleTimes; + adc1SampleTemp = adc1TempSum / adcSampleTimes; + /* Force convert to float */ + mtrCtrl->adc0Compensate = (float) adc0SampleTemp; + mtrCtrl->adc1Compensate = (float) adc1SampleTemp; + /* The normal value scope: 1800 < adc0Compensate < 2200 */ + if(g_mc.adc0Compensate < ADC_TRIMVALUE_MIN || g_mc.adc0Compensate > ADC_TRIMVALUE_MAX \ + || g_mc.adc1Compensate < ADC_TRIMVALUE_MIN || g_mc.adc1Compensate > ADC_TRIMVALUE_MAX) { + DBG_PRINTF("ADC trim value error,please reset!"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + } + adcSampleTimes = 0; + adc0TempSum = 0; + adc1TempSum = 0; +} + +/** + * @brief Read the ADC current sampling value. + * @param CurrUvw Three-phase current. + * @retval None. + */ +static void ReadCurrUvw(UvwAxis *CurrUvw) +{ + MCS_ASSERT_PARAM(CurrUvw != NULL); + float adc0 = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + float adc1 = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + /* Convert adc sample value to current value */ + CurrUvw->u = -(adc0 - g_mc.adc0Compensate) * g_mc.adcCurrCofe; + CurrUvw->w = -(adc1 - g_mc.adc1Compensate) * g_mc.adcCurrCofe; + CurrUvw->v = -CurrUvw->u - CurrUvw->w; +} + +/** + * @brief Setting the APT Output Duty Cycle. + * @param aptx APT register base address. + * @param leftDuty Left duty cycle. + * @param rightDuty Right duty cycle. + * @retval None. + */ +static void SetPwmDuty(APT_Handle *aptx, float leftDuty, float rightDuty) +{ + MCS_ASSERT_PARAM(aptx != NULL); + MCS_ASSERT_PARAM(leftDuty > 0); + MCS_ASSERT_PARAM(rightDuty > 0); + unsigned short maxPeriodCnt = aptx->waveform.timerPeriod; + unsigned short cntCmpLeftEdge = (unsigned short)(leftDuty * maxPeriodCnt); + unsigned short cntCmpRightEdge = (unsigned short)(rightDuty * maxPeriodCnt); + /* avoid overflowing */ + cntCmpLeftEdge = (cntCmpLeftEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpLeftEdge; + cntCmpRightEdge = (cntCmpRightEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpRightEdge; + HAL_APT_SetPWMDuty(aptx, cntCmpLeftEdge, cntCmpRightEdge); +} + +/** + * @brief Duty Cycle Setting. + * @param dutyUvwLeft Three-phase left duty cycle. + * @param dutyUvwRight Three-phase right duty cycle. + * @retval None. + */ +static void SetPwmDutyCp(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight) +{ + MCS_ASSERT_PARAM(dutyUvwLeft != NULL); + MCS_ASSERT_PARAM(dutyUvwRight != NULL); + /* Setting the Three-Phase Duty Cycle */ + SetPwmDuty(&g_apt0, dutyUvwLeft->u, dutyUvwRight->u); + SetPwmDuty(&g_apt1, dutyUvwLeft->v, dutyUvwRight->v); + SetPwmDuty(&g_apt2, dutyUvwLeft->w, dutyUvwRight->w); +} + +/** + * @brief To set the ADC sampling trigger comparison value. + * @param cntCmpSOCA Soca Compare Count Value. + * @param cntCmpSOCB Socb Compare Count Value. + * @retval None. + */ +static void SetADCTriggerTime(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB) +{ + MCS_SetAdcCompareR1(g_apt[PHASE_U], cntCmpSOCA, cntCmpSOCB, g_mc.aptMaxcntCmp); +} + +/** + * @brief Temprature table, the temprature detect range is 15 ~ 60 degree. + * @param tempResisValue Temperature sensor resistance. + * @retval None. + */ +static float TempTable(float tempResisValue) +{ + float boardTemp = 0.0f; + /* Temperatures between 15 and 30. */ + if (tempResisValue > TEMP_RES_30 && tempResisValue <= TEMP_RES_15) { + boardTemp = TEMP_15 + (TEMP_30 - TEMP_15) * (TEMP_RES_15 - tempResisValue) / (TEMP_RES_15 - TEMP_RES_30); + } else if (tempResisValue > TEMP_RES_45 && tempResisValue <= TEMP_RES_30) { /* Temperature between 30 and 45. */ + boardTemp = TEMP_30 + (TEMP_45 - TEMP_30) * (TEMP_RES_30 - tempResisValue) / (TEMP_RES_30 - TEMP_RES_45); + } else if (tempResisValue > TEMP_RES_60 && tempResisValue <= TEMP_RES_45) { /* Temperature between 45 and 50. */ + boardTemp = TEMP_45 + (TEMP_60 - TEMP_45) * (TEMP_RES_45 - tempResisValue) / (TEMP_RES_45 - TEMP_RES_60); + } else if (tempResisValue <= TEMP_RES_60) { + boardTemp = TEMP_60; /* If temperature is over 60, set temperature as 60. */ + } else if (tempResisValue >= TEMP_RES_15) { + boardTemp = TEMP_15; /* If temperature is lower 15, set temperature as 15. */ + } + return boardTemp; +} + +/** + * @brief Read power board temperature and udc. + * @retval None. + */ +static void ReadBoardTempAndUdc(void) +{ + HAL_ADC_SoftTrigSample(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + HAL_ADC_SoftTrigSample(&ADCUDC_HANDLE, ADCUDCSOCNUM); + BASE_FUNC_DELAY_US(CNT_10); /* Delay 10 us. */ + /* Force convert to float type. */ + float resisAdcValue = (float)HAL_ADC_GetConvResult(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + /* 10 / (x + 10) * 3.3 = resisAdcValue / 4096 * 3.3, x is resisValue, 10kohm is resistor divider value. */ + float resisValue = (4096.0f * 10.0f - 10.0f * resisAdcValue) / resisAdcValue; + g_mc.powerBoardTemp = TempTable(resisValue); + g_mc.udc = ((float)HAL_ADC_GetConvResult(&ADCUDC_HANDLE, ADCUDCSOCNUM)) * ADC_UDC_COFFI; +} + +/** + * @brief Execut abnormal feedback speed protect motion. + * @retval None. + */ +static void SpdFbkErrorProt_Exec(void) +{ + if (g_mc.prot.motorErrStatus.Bit.motorStalling == 0 && + g_mc.prot.motorErrStatus.Bit.overVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.lowerVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.overIpmTempErr == 0 && + g_mc.prot.motorErrStatus.Bit.overCurrErr == 0) { + g_mc.prot.motorErrStatus.Bit.revRotErr = 1; + /* If revRotErr, execute protect motion. */ + ProtSpo_Exec(g_apt); + } +} + +/** + * @brief Execut nan data protect motion. + * @retval None. + */ +static void NanDataDetect(void) +{ + static short errorSpdStatus = 0; + /* Detect the nan observer speed or current value. */ + if (isnan(g_mc.smo.spdEst) || isnan(g_mc.idqRef.q)) { + errorSpdStatus++; + } else { + errorSpdStatus = 0; + } + /* If the data is nan & continuous counting value is over 500 times, execute protect motion. + the detect time is 500 * 500us = 250ms. */ + if (errorSpdStatus >= 500) { + errorSpdStatus = 0; + SpdFbkErrorProt_Exec(); + } +} + +/** + * @brief Check abnormal feedback speed. + * @retval None. + */ +static void CheckSpdFbkStatus(void) +{ + static short errorCurrStatus = 0; + static short errorDeltaSpdStatus = 0; + NanDataDetect(); + if (g_mc.stateMachine == FSM_RUN) { + /* Detect the abnormal idq feedback current. */ + if (Abs(g_mc.idqRef.q - g_mc.idqFbk.q) >= CTRL_IF_CURR_AMP_A) { + errorCurrStatus++; + } else { + errorCurrStatus = 0; + } + /* Detect the abnormal feedback speed, the normal speed is > 0, if smo.spdEst < -10 && + delta speed error > USER_MIN_SPD_HZ + 10.0f at FSM_RUN stage, set the motor motion as error */ + if (g_mc.smo.spdEst < -10.0f && (g_mc.spdRefHz - g_mc.smo.spdEst > USER_MIN_SPD_HZ + 10.0f)) { + errorDeltaSpdStatus++; + } + } + /* Execute protect motion if count over 500 times, this error status caused by abnormal speed + or cabnormal urrent feedback, the detect time is 500 * 500us = 250ms. */ + if (errorCurrStatus >= 500) { + errorCurrStatus = 0; + SpdFbkErrorProt_Exec(); + } + /* This error statu caused by motor stalling, the detect time is 2 * 500us = 1ms. */ + if (errorDeltaSpdStatus >= 2) { + errorDeltaSpdStatus = 0; + g_mc.prot.motorErrStatus.Bit.motorStalling = 1; + } +} + +/** + * @brief Check Potentiometer Value callback function. + * @param param The TIMER_Handle. + * @retval None. + */ +void CheckPotentiometerValueCallback(void *param) +{ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + static float potentiomitorAdcValue = 0.0f; + static float spdCmdHz = 0; + static float spdCmdHzLast = USER_MIN_SPD_HZ; /* 35.0 is spdCmdHzLast init value */ + HAL_ADC_SoftTrigSample(&ADCPTT_HANDLE, ADCPTTSOCNUM); + BASE_FUNC_DELAY_US(10); /* Delay 10 us. */ + potentiomitorAdcValue = (float)HAL_ADC_GetConvResult(&ADCPTT_HANDLE, ADCPTTSOCNUM); + /* 4045.0 is adc sample max value of potentiomitor, convert max spd to 180.25Hz */ + spdCmdHz = potentiomitorAdcValue / 4045.0f * USER_MAX_SPD_HZ; + if (Abs(spdCmdHzLast - spdCmdHz) < 1.0f) { /* Ignore changes less than 1. */ + return; + } + spdCmdHzLast = spdCmdHz; + if (spdCmdHz < USER_MIN_SPD_HZ) { /* 35.0 is spdCmdHz lower limit */ + spdCmdHz = USER_MIN_SPD_HZ; /* 35.0 is spdCmdHz lower limit */ + } + if (spdCmdHz > g_mc.mtrParam.maxElecSpd) { /* spdCmdHz upper limit */ + spdCmdHz = g_mc.mtrParam.maxElecSpd; /* spdCmdHz upper limit */ + } + if (g_mc.spdAdjustMode == CUST_SPEED_ADJUST) { + g_mc.spdCmdHz = spdCmdHz; + } +} + +/** + * @brief System timer ISR for Motor Statemachine CallBack function. + * @param param The systick timer handle. + * @retval None. + */ +void MotorStatemachineCallBack(void *param) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + /* Read power board temprature and voltage. */ + ReadBoardTempAndUdc(); + /* Motor speed loop state machine. */ + TSK_SystickIsr(&g_mc, g_apt); + + /* Motor error speed feedback check. */ + CheckSpdFbkStatus(); + /* Motor stalling detect. */ + STP_Det_ByCurrSpd(&g_mc.prot.stall, &g_mc.prot.motorErrStatus, g_mc.smo.spdEst, g_mc.idqFbk); + STP_Exec(&g_mc.prot.motorErrStatus, g_apt); + + /* Motor over voltage detect. */ + OVP_Det(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + OVP_Exec(&g_mc.prot.ovp, &g_mc.spdRefHz, g_apt); + OVP_Recy(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* Motor lower voltage detect. */ + LVP_Det(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + LVP_Exec(&g_mc.prot.lvp, &g_mc.spdRefHz, g_apt); + LVP_Recy(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* Power board over temperature detect. */ + OTP_Det(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + OTP_Exec(&g_mc.prot.otp, &g_mc.spdRefHz, g_apt); + OTP_Recy(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + + /* If protect level == 4, set motor state as stop. */ + if (g_mc.prot.ovp.protLevel == LEVEL_4 || g_mc.prot.lvp.protLevel == LEVEL_4 \ + || g_mc.prot.otp.protLevel == LEVEL_4) { + SysCmdStopSet(&g_mc.statusReg); + } +} + +/** + * @brief The carrier ISR wrapper function. + * @param aptHandle The APT handle. + * @retval None. + */ +void MotorCarrierProcessCallback(void *aptHandle) +{ + MCS_ASSERT_PARAM(aptHandle != NULL); + BASE_FUNC_UNUSED(aptHandle); + /* the carrierprocess of motor */ + MCS_CarrierProcess(&g_mc); + /* Over current protect */ + if (g_mc.stateMachine == FSM_RUN || g_mc.stateMachine == FSM_STARTUP) { + OCP_Det(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus, g_mc.idqFbk); + OCP_Exec(&g_mc.prot.ocp, &g_mc.idqFbk, g_apt); /* Execute over current protect motion */ + if (g_mc.prot.ocp.protLevel < LEVEL_4) { + OCP_Recy(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus); + } + } +} + +/** + * @brief Event interrupt callback function of APT module. + * @param para APT module handle. + * @retval None. + */ +void MotorSysErrCallback(void *para) +{ + MCS_ASSERT_PARAM(para != NULL); + APT_Handle *handle = (APT_Handle *)para; + /* The IPM overcurrent triggers and disables the three-phase PWM output. */ + MotorPwmOutputDisable(g_apt); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_U], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_V], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_W], APT_OC_COMBINE_EVENT_A1); + /* Status setting error */ + SysErrorSet(&g_mc.statusReg); + DBG_PRINTF("APT error! \r\n"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + BASE_FUNC_UNUSED(handle); +} + +/** + * @brief Init motor controller's data structure. + * @retval None. + */ +static void InitSoftware(void) +{ + /* Initializing motor control param */ + TSK_Init(); + /* Read phase-uvw current */ + g_mc.readCurrUvwCb = ReadCurrUvw; + g_mc.setPwmDutyCb = SetPwmDutyCp; + g_mc.setADCTriggerTimeCb = SetADCTriggerTime; +} + +/** + * @brief Config the KEY func. + * @param handle The GPIO handle. + * @retval None. + */ +static KEY_State Key_StateRead(GPIO_Handle *handle) +{ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + BASE_FUNC_DELAY_MS(30); /* delay 30ms for deshake */ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + while (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + } + return KEY_DOWN; + } + } + return KEY_UP; +} + +/** + * @brief Control motor start and stop state by key func. + * @param param The GPIO handle. + * @retval None. + */ +void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + if (Key_StateRead(handle) == KEY_DOWN) { + if (g_mc.motorStateFlag == 0) { /* start motor */ + g_mc.motorStateFlag = 1; + SysCmdStartSet(&g_mc.statusReg); + } else if (g_mc.motorStateFlag == 1) { /* stop motor */ + g_mc.motorStateFlag = 0; + SysCmdStopSet(&g_mc.statusReg); + } + } +} + +/** + * @brief User application main entry function. + * @retval BSP_OK. + */ +int MotorMainProcess(void) +{ + unsigned int tickNum1Ms = 2; /* 1ms tick */ + static unsigned int tickCnt1Ms = 0; + unsigned int tickNum500Ms = 1000; /* 500ms tick */ + static unsigned int tickCnt500Ms = 0; + SystemInit(); + HMI_Init(); /* Init uart interrupt */ + HAL_TIMER_Start(&g_timer0); + HAL_TIMER_Start(&g_timer1); + + /* Disable PWM output before startup. */ + MotorPwmOutputDisable(g_apt); + /* Software initialization. */ + InitSoftware(); + /* Start the PWM clock. */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + /* System Timer clock. */ + BASE_FUNC_DELAY_MS(ADC_READINIT_DELAY); + TrimInitAdcShiftValue(&g_mc); + BASE_FUNC_DELAY_MS(MOTOR_START_DELAY); + while (1) { + /* Cycling send data to host */ + HMI_Process_Tx(&g_mc); + if (g_mc.msTickCnt - tickCnt1Ms >= tickNum1Ms) { + tickCnt1Ms = g_mc.msTickCnt; + /* User Code 1ms Event */ + HMI_Process_Rx(&g_mc); + /* User Code 1ms Event */ + } + + if (g_mc.msTickCnt - tickCnt500Ms >= tickNum500Ms) { + if (SysIsError(&g_mc.statusReg) != true) { + /* LED toggle in normal status. */ + HAL_GPIO_TogglePin(&LED1_HANDLE, LED1_PIN); + } + tickCnt500Ms = g_mc.msTickCnt; + } + } + return 0; +} diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c new file mode 100644 index 00000000..7c4f7525 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c @@ -0,0 +1,718 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of cust process interface. + */ + +#include "cust_process.h" +#include "mcs_ctlmode_config.h" +#include "mcs_math_const.h" +#include "mcs_user_config.h" +#include "mcs_assert.h" +#include "main.h" +#include "uart_module.h" +#include "mcs_mtr_param.h" +/* Macro definitions --------------------------------------------------------------------------- */ +/* Constant value. */ +#define CONST_VALUE_60 60.0f /* Constant value 60. */ +#define CONST_VALUE_DIV_1000 0.001f /* Constant value 1/1000. */ + +/* Data array index. */ +#define DATA_SEGMENT_ONE 0 /* First element of the data segment */ +#define DATA_SEGMENT_TWO 1 /* Second element of the data segment */ +#define DATA_SEGMENT_THREE 2 /* Third element of the data segment */ +#define DATA_SEGMENT_FOUR 3 /* Fourth element of the data segment */ +#define CUSTACKCODELEN 10 /* Ack code length */ + +/* Command code. */ +#define SET_PID_KP 0x01 /* Set Pid Kp Command Params */ +#define SET_PID_KI 0x02 /* Set Pid Ki Command Params */ +#define SET_PID_LIMIT 0x03 /* Set Pid limit Command Params */ + +#define SET_SMO1TH_PLL_BDW 0x01 /* Set Smo1th Pll BandWidth Command Params */ +#define SET_SMO1TH_SPDFLITER_FC 0x02 /* Set Smo1th Fc Command Params */ +#define SET_SMO1TH_FILCOMPANGLE 0x03 /* Set Smo1th FillComp Command Params */ + +#define SET_SMO4TH_KD 0x01 /* Set Smo4th Kd Command Params */ +#define SET_SMO4TH_KP 0x02 /* Set Smo4th Kq Command Params */ + +#define SET_SPD_COMMAND_HZ 0x01 /* Set Target Speed Command Params */ +#define SET_SPD_RMG_SLOPE 0x02 /* Set Speed Slope Command Params */ + +#define SET_MAX_ELEC_SPD 0x01 /* Set Max Motor Speed Command Params */ +#define SET_MOTOR_NUM_OF_PAIRS 0x02 /* Set Motor Command Params */ + +#define SET_MOTOR_RES_OF_STATOR 0x01 /* Set Motor Res Command Params */ +#define SET_MOTOR_DAXIS_INDUCTANCE 0x02 /* Set Motor Daxis Inductance Command Params */ +#define SET_MOTOR_QAXIS_INDUCTANCE 0x03 /* Set Motor Qaxis Inductance Command Params */ + +#define SET_SVPWM_VOLTAGE_PER_UNIT 0x01 /* Set Svpwm Voltage Params */ +#define SET_ADC_CURRENT_SAMPLE_COFE 0x02 /* Set Adc coffe Params */ +#define SET_CURRENT_LOOP_CONTROL_PERIOD 0x03 /* Set Current loop period Command Params */ + +#define SET_IF_TARGET_CURRENT_VALUE 0x01 /* Set If Target Params */ +#define SET_INCREMENT_OF_IF_CURRENT 0x02 /* Set If Step Command Params */ +#define SET_SPEED_RING_BEGIN_SPEED 0x03 /* Set If to Smo Start Speed Command Params */ + +static unsigned char ackCode = 0; +static unsigned char g_uartTxBuf[CUSTACKCODELEN] = {0}; + +/** + * @brief Set observer type. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverType(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + if (funcCode == FOC_OBSERVERTYPE_SMO1TH) { + ackCode = 0X01; + mtrCtrl->obserType = FOC_OBSERVERTYPE_SMO1TH; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->obserType); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH) { + ackCode = 0X02; + mtrCtrl->obserType = FOC_OBSERVERTYPE_SMO4TH; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->obserType); + } +} + +/** + * @brief Set pid parameter ack code. + * @param funcCode Received data funccode. + */ +static unsigned char SetPidAckCode(int funcCode) +{ + switch (funcCode) { + /* Set current loop D-Axis PID parameter ack code. */ + case FOC_CURDAXISPID_PARAMS: + ackCode = 0xE0; + break; + /* Set current loop Q-Axis PID parameter ack code. */ + case FOC_CURQAXISPID_PARAMS: + ackCode = 0xE3; + break; + /* Set speed loop PID parameter ack code. */ + case FOC_SPDPID_PARAMS: + ackCode = 0xE6; + break; + default: + break; + } + return ackCode; +} + +/** + * @brief Set pid parameters. + * @param pidHandle The pid control handle. + * @param rxData Receive buffer + */ +static void SetPidParams(PID_Handle *pidHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + switch (cmdCode) { + case SET_PID_KP: /* Set the P parameter. */ + PID_SetKp(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_KP), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_KI: /* Set the I parameter. */ + PID_SetKi(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_KI), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_LIMIT: /* Set the pid limit. */ + PID_SetLimit(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_LIMIT), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor pid parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorPidParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_CURDAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.dAxisPi, rxData); /* Set Curr loop Daxis pid params */ + } else if (funcCode == FOC_CURQAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.qAxisPi, rxData); /* Set Curr loop Qaxis pid params */ + mtrCtrl->currCtrl.dAxisPi.upperLimit = mtrCtrl->currCtrl.qAxisPi.upperLimit; + mtrCtrl->currCtrl.dAxisPi.lowerLimit = mtrCtrl->currCtrl.qAxisPi.lowerLimit; + } else if (funcCode == FOC_SPDPID_PARAMS) { + SetPidParams(&mtrCtrl->spdCtrl.spdPi, rxData); /* Set Speed loop params */ + } +} + +/** + * @brief Set first order sliding mode observer parameters. + * @param smoHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo1thParams(FOSMO_Handle *smoHandle, CUSTDATATYPE_DEF *rxData) +{ + smoHandle->kSmo = rxData->data[DATA_SEGMENT_TWO].typeF; + ackCode = 0X09; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->kSmo); +} + +/** + * @brief Set first order sliding mode observer's phase-locked loop parameters. + * @param smoHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo1thPLLParams(FOSMO_Handle *smoHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + float pllBdw = 0.0f; + switch (cmdCode) { + case SET_SMO1TH_PLL_BDW: /* Set the bandwidth. */ + pllBdw = rxData->data[DATA_SEGMENT_THREE].typeF; + smoHandle->pll.pi.kp = 2.0f * pllBdw; /* kp = 2.0f * pllBdw */ + smoHandle->pll.pi.ki = pllBdw * pllBdw; /* ki = pllBdw * pllBdw */ + ackCode = 0X0A; + CUST_AckCode(g_uartTxBuf, ackCode, pllBdw); + break; + case SET_SMO1TH_SPDFLITER_FC: /* Set the cutoff frequency. */ + smoHandle->spdFilter.fc = rxData->data[DATA_SEGMENT_THREE].typeF; + smoHandle->spdFilter.a1 = 1.0f / (1.0f + DOUBLE_PI * smoHandle->spdFilter.fc * CTRL_CURR_PERIOD); + smoHandle->spdFilter.b1 = 1.0f - smoHandle->spdFilter.a1; + ackCode = 0X0B; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->spdFilter.fc); + break; + case SET_SMO1TH_FILCOMPANGLE: /* Set the compensation angle. */ + smoHandle->filCompAngle = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0C; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->filCompAngle); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set fourth order sliding mode observer parameters. + * @param smo4thHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo4thParams(SMO4TH_Handle *smo4thHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SMO4TH_KD: /* Set d axis gain. */ + smo4thHandle->kd = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0D; + CUST_AckCode(g_uartTxBuf, ackCode, smo4thHandle->kd); + break; + case SET_SMO4TH_KP: /* Set q axis gain. */ + smo4thHandle->kq = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0E; + CUST_AckCode(g_uartTxBuf, ackCode, smo4thHandle->kq); + break; + default: + break; + } +} + +/** + * @brief Set fourth order sliding mode observer's phase-locked loop parameters. + * @param smo4thHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo4thPLLParams(SMO4TH_Handle *smo4thHandle, CUSTDATATYPE_DEF *rxData) +{ + float pllBdw = rxData->data[DATA_SEGMENT_TWO].typeF; + smo4thHandle->pll.pi.kp = (2.0f) * pllBdw; /* kp = 2.0f * pllBdw */ + smo4thHandle->pll.pi.ki = pllBdw * pllBdw; + ackCode = 0X11; + CUST_AckCode(g_uartTxBuf, ackCode, pllBdw); +} + +/** + * @brief Set observer parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_OBSERVERTYPE_SMO1TH) { + SetObserverSmo1thParams(&mtrCtrl->smo, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO1TH_PLL) { + SetObserverSmo1thPLLParams(&mtrCtrl->smo, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH) { + SetObserverSmo4thParams(&mtrCtrl->smo4th, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH_PLL) { + SetObserverSmo4thPLLParams(&mtrCtrl->smo4th, rxData); + } +} + +/** + * @brief Set motor speed and speed slope. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorSpdAndSlope(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SPD_COMMAND_HZ: /* Set target speed(hz). */ + mtrCtrl->spdCmdHz = rxData->data[DATA_SEGMENT_THREE].typeF * mtrCtrl->mtrParam.mtrNp / CONST_VALUE_60; + /* Judgement the value > 0.00001, make sure denominator != 0. */ + if (rxData->data[DATA_SEGMENT_FOUR].typeF > 0.00001f) { + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_FOUR].typeF * CTRL_SYSTICK_PERIOD; + } + ackCode = 0X16; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->spdCmdHz); + break; + case SET_SPD_RMG_SLOPE: /* Set speed slope. */ + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_THREE].typeF * CTRL_SYSTICK_PERIOD; + ackCode = 0X17; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor base parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorBaseParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MAX_ELEC_SPD: /* Set max electric speed. */ + mtrParamHandle->maxElecSpd = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrParamHandle->mtrNp; + ackCode = 0X18; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_MOTOR_NUM_OF_PAIRS: /* Set the number of motor pole pairs. */ + mtrParamHandle->mtrNp = (unsigned short)(rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = 0X19; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrParamHandle->mtrNp); + break; + default: + break; + } +} + +/** + * @brief Set motor special parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorSpecialParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MOTOR_RES_OF_STATOR: /* Set the resistor of stator. */ + mtrParamHandle->mtrRs = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1A; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrRs); + break; + case SET_MOTOR_DAXIS_INDUCTANCE: /* Set the d axis inductance. */ + mtrParamHandle->mtrLd = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1B; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLd); + break; + case SET_MOTOR_QAXIS_INDUCTANCE: /* Set the q axis inductance. */ + mtrParamHandle->mtrLq = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1C; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLq); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor board parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetMotorBoardParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SVPWM_VOLTAGE_PER_UNIT: /* Set svpwm voltage per unit. */ + mtrCtrl->sv.voltPu = rxData->data[DATA_SEGMENT_THREE].typeF * ONE_DIV_SQRT3; + mtrCtrl->currCtrl.outLimit = mtrCtrl->sv.voltPu * ONE_DIV_SQRT3; + ackCode = 0X1D; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_ADC_CURRENT_SAMPLE_COFE: /* Set adc current sample cofeature. */ + mtrCtrl->adcCurrCofe = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1E; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->adcCurrCofe); + break; + case SET_CURRENT_LOOP_CONTROL_PERIOD: /* Set current loop control period. */ + mtrCtrl->currCtrlPeriod = 1 / rxData->data[DATA_SEGMENT_THREE].typeF * CONST_VALUE_DIV_1000; + ackCode = 0X1F; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == MOTOR_PARAMS_BASE) { + SetMotorBaseParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_SPECIAL) { + SetMotorSpecialParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_BOARD) { + SetMotorBoardParams(mtrCtrl, rxData); + } +} + +/** + * @brief Motor start. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStart(MTRCTRL_Handle *mtrCtrl) +{ + if (mtrCtrl->stateMachine != FSM_RUN) { + SysCmdStartSet(&mtrCtrl->statusReg); /* start motor. */ + mtrCtrl->motorStateFlag = 1; + ackCode = 0X24; /* send ackcode to host. */ + CUST_AckCode(g_uartTxBuf, ackCode, 1); + } +} + +/** + * @brief Motor stop. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStop(MTRCTRL_Handle *mtrCtrl) +{ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + ackCode = 0X25; + CUST_AckCode(g_uartTxBuf, ackCode, 0); +} + +/** + * @brief Motor state reset. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorReset(MTRCTRL_Handle *mtrCtrl) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_SoftReset(); +} + +/** + * @brief Set IF-Startup parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetStartupIFParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_IF_TARGET_CURRENT_VALUE: /* Set I/F start up target current value. */ + mtrCtrl->ifCtrl.targetAmp = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X26; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.targetAmp); + break; + case SET_INCREMENT_OF_IF_CURRENT: /* Set increment of I/F start up current. */ + mtrCtrl->ifCtrl.stepAmp = mtrCtrl->ifCtrl.targetAmp / rxData->data[DATA_SEGMENT_THREE].typeF * + CTRL_SYSTICK_PERIOD; + ackCode = 0X27; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.stepAmp); + break; + case SET_SPEED_RING_BEGIN_SPEED: /* Set speed ring begin speed. */ + mtrCtrl->startup.spdBegin = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrCtrl->mtrParam.mtrNp; + ackCode = 0X28; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set start up parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetStartupParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_STARTUP_IF) { + SetStartupIFParams(mtrCtrl, rxData); + } +} + +/** + * @brief Set adjust speed mode. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetAdjustSpdMode(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get commond code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + if (funcCode == HOST_SPEED_ADJUST) { + mtrCtrl->spdAdjustMode = HOST_SPEED_ADJUST; + /* Uart connect success. */ + mtrCtrl->uartConnectFlag = CONNECTING; + ackCode = 0X2A; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + } else if (funcCode == CUST_SPEED_ADJUST) { + if (cmdCode == 1) { /* If uart connection disconnected & stop motor commond. */ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + } + mtrCtrl->spdAdjustMode = CUST_SPEED_ADJUST; + ackCode = 0X2B; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + /* Uart disconnect. */ + mtrCtrl->uartConnectFlag = DISCONNECT; + } +} + +/** + * @brief Check uart connect. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_UartHandShake(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); +} + +/** + * @brief Set Motor Initial Status Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorInitParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_OBSERVER_TYPE: { /* Set observer type. */ + CMDCODE_SetObserverType(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_PID_PARAMS: { /* Set motor pid parameters. */ + CMDCODE_SetMotorPidParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_OBSERVER_PARAMS: { /* Set observer parameters. */ + CMDCODE_SetObserverParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_TARGETSPD: { /* Set motor speed and speed slope. */ + CMDCODE_SetMotorSpdAndSlope(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_PARAMS: { /* Set motor parameters. */ + CMDCODE_SetMotorParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_ADJUSTSPD_MODE: /* Set adjust speed mode. */ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); + break; + default: + break; + } +} + +/** + * @brief Set Motor Control System Status. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorState(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + BASE_FUNC_UNUSED(rxData); + switch (code) { + case CMDCODE_MOTOR_START: { /* Motor start command */ + CMDCODE_MotorStart(mtrCtrl); + } + break; + case CMDCODE_MOTOR_STOP: { /* Motor stop command */ + CMDCODE_MotorStop(mtrCtrl); + } + break; + case CMDCODE_MOTORSTATE_RESET: { /* Motor reset command */ + CMDCODE_MotorReset(mtrCtrl); + } + break; + default: + break; + } +} + +/** + * @brief Set Startup and Uart Link Handshake Flag Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetOtherParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_STARTUP_PARAMS: /* Set start up parameters. */ + CMDCODE_SetStartupParams(mtrCtrl, rxData); + break; + case CMDCODE_UART_HANDSHAKE: { /* Check uart hand shake. */ + CMDCODE_UartHandShake(mtrCtrl, rxData); + } + break; + case CMDCODE_UART_HEARTDETECT: { /* Check uart hand shake. */ + mtrCtrl->uartHeartDetCnt++; + } + break; + default: + break; + } +} +/** + * @brief Instruction code executor. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_Process(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + CMDCODE_EXE_SetMotorInitParams(mtrCtrl, rxData, code); + CMDCODE_EXE_SetMotorState(mtrCtrl, rxData, code); + CMDCODE_EXE_SetOtherParams(mtrCtrl, rxData, code); +} + +/** + * @brief Host data download callback and data parsing. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + + /* Uart data storage struct */ + CUSTDATATYPE_DEF data; + volatile unsigned char *ptrCnt = &rxBuf[FRAME_CHECK_BEGIN + 1]; + volatile unsigned char *strCnt = &data.data[0].typeCh[0]; + for (unsigned int j = 0; j < FRAME_RECV_DATA_LENTH * FRAME_ONE_DATA_LENTH; j++) { + *strCnt++ = *ptrCnt++; + } + /* Message function code. */ + data.code = rxBuf[FRAME_CHECK_BEGIN]; + CMDCODE_EXE_Process(mtrCtrl, &data, data.code); +} + +/** + * @brief The host computer displays data transmission. + * @param mtrCtrl The motor control handle. + * @param txData Message content. + * @param stage Message status function code. + */ +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txData != NULL); + if (mtrCtrl->stateMachine == FSM_IDLE) { + mtrCtrl->smo.spdEst = 0.0f; + } + /* Data send to host. */ + txData->data[CURRDQ_Q].typeF = mtrCtrl->idqFbk.q; + txData->data[CURRDQ_D].typeF = mtrCtrl->idqFbk.d; + txData->data[CURRREFDQ_Q].typeF = mtrCtrl->idqRef.q; + txData->data[CURRREFDQ_D].typeF = mtrCtrl->idqRef.d; + /* Motor current speed. */ + txData->data[CURRSPD].typeF = mtrCtrl->smo.spdEst * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Motor commond speed. */ + txData->data[SPDCMDHZ].typeF = mtrCtrl->spdCmdHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Bus voltage. */ + txData->data[UDC].typeF = mtrCtrl->udc; + /* Power board temprature. */ + txData->data[POWERBOARDTEMP].typeF = mtrCtrl->powerBoardTemp; + /* Motor protection status flag. */ + txData->data[CUST_ERR_CODE].typeI = mtrCtrl->prot.motorErrStatus.all; + /* Three phase current. */ + txData->data[CURRUVW_U].typeF = mtrCtrl->currUvw.u; + txData->data[CURRUVW_V].typeF = mtrCtrl->currUvw.v; + txData->data[CURRUVW_W].typeF = mtrCtrl->currUvw.w; + /* Three phase pwm duty. */ + txData->data[PWMDUTYUVW_U].typeF = mtrCtrl->dutyUvw.u; + txData->data[PWMDUTYUVW_V].typeF = mtrCtrl->dutyUvw.v; + txData->data[PWMDUTYUVW_W].typeF = mtrCtrl->dutyUvw.w; + /* Motor electric angle. */ + txData->data[AXISANGLE].typeF = mtrCtrl->axisAngle; + txData->data[VDQ_Q].typeF = mtrCtrl->vdqRef.q; + txData->data[VDQ_D].typeF = mtrCtrl->vdqRef.d; + txData->data[SPDREFHZ].typeF = mtrCtrl->spdRefHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + txData->data[SENDTIMESTAMP].typeF = mtrCtrl->uartTimeStamp; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h new file mode 100644 index 00000000..60fe69bb --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h @@ -0,0 +1,36 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "protocol.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); + +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c new file mode 100644 index 00000000..58bf15a7 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c @@ -0,0 +1,57 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of human-machine interface. + */ + +#include "hmi_module.h" +#include "mcs_assert.h" + +/** + * @brief HMI Initializatio. + * @retval None. + */ +void HMI_Init(void) +{ + UartRecvInit(); +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Rx(mtrCtrl); +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Tx(mtrCtrl); +} diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h new file mode 100644 index 00000000..056f8d73 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h @@ -0,0 +1,37 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "uart_module.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void HMI_Init(void); + +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl); +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c new file mode 100644 index 00000000..56f0c0bb --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c @@ -0,0 +1,174 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ + +#include "protocol.h" +#include "apt.h" +#include "typedefs.h" +#include "main.h" +#include "mcs_assert.h" +#include "cust_process.h" + +/** + * @brief Callback function for receiving data analysis and processing. + * @param rxBuf Receive buffer. + */ +__weak void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(rxBuf); +} +/** + * @brief User-defined protocol message sending function (weak function). + * @param rxData Sending Messages.. + */ +__weak void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(*txData); +} + +static void (*g_ptrDataProcess)(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) = CUST_UartDataProcess; + +/** + * @brief Frame checksum. + * @param ptr Pointer to the data to be checked + * @param num Number of bytes + * @retval unsigned char Checksum + */ +static unsigned char CheckSum(unsigned char *ptr, unsigned char num) +{ + unsigned char sum = 0; + unsigned char *p = ptr; + /* Calculate the sum of received data. */ + for (unsigned char i = 0; i < num; i++) { + sum += (unsigned char)*p; + p++; + } + return sum; +} + +/** + * @brief Transmitting Data Frames. + * @param mtrCtrl The motor control handle. + * @param txBuf Sending Messages. + */ +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txBuf != NULL); + unsigned int dataLen = FRAME_ONE_DATA_LENTH * SEND_FRAME_DATA_NUM; + unsigned char i = 0; + CUSTDATATYPE_DEF txData = {0}; + CUST_SetTxMsg(mtrCtrl, &txData); + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_SENT; + /* Message data */ + for (unsigned char x = 0; x < SEND_FRAME_DATA_NUM; x++) { + unsigned char floatIndex = 0; + unsigned char byteOffset = i; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + } + /* Message verification domain */ + txBuf[dataLen + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[dataLen + i++] = FRAME_END; + return dataLen + i; +} + +/** + * @brief Transmitting Data Frames. + * @param txBuf Sending Cust Ack Code. + * @param ackCode Ack Code. + * @param varParams Host set parameter. + */ +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(txBuf != NULL); + CUSTDATATYPE_DEF txData = {0}; + int dataIndex = 0; + unsigned int i = 0; + unsigned int txLen = 0; + unsigned char dataLen = FRAME_ONE_CHAR_LENTH + FRAME_ONE_DATA_LENTH; + + txData.data[0].typeF = varParams; + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_CUSTACK; + /* Message ack code */ + txBuf[i++] = ackCode; + /* Message data */ + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + + /* Message verification domain */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = FRAME_END; + txLen = FRAME_ONE_CHAR_LENTH + i++; + HAL_UART_WriteDMA(&g_uart0, txBuf, txLen); +} + +/** + * @brief Cust receive data process. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + unsigned char g_uartTxBuf[10] = {0}; + unsigned char ackCode = 0; + /* Frame header check */ + if (rxBuf[0] != FRAME_START) { + ackCode = 0X78; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Frame trailer check */ + if (rxBuf[FRAME_LENTH - 1] != FRAME_END) { + ackCode = 0X79; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Checksum */ + if (CheckSum((unsigned char*)&rxBuf[FRAME_CHECK_BEGIN], FRAME_CHECK_NUM) != rxBuf[FRAME_CHECKSUM]) { + ackCode = 0X7A; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } else { + if (g_ptrDataProcess == NULL) { + return; + } else { + g_ptrDataProcess(mtrCtrl, rxBuf); + } + } +} diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h new file mode 100644 index 00000000..900a00d8 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h @@ -0,0 +1,121 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ +#ifndef McsMagicTag_PORTOCOL_H +#define McsMagicTag_PORTOCOL_H + +#include "uart.h" +#include "mcs_carrier.h" + +#define RS485_SEND_ENABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = GPIO_PIN_7 +#define RS485_SEND_DISABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = BASE_CFG_UNSET + +#define RX_BUF_LEN (16) +#define SEND_FRAME_DATA_NUM (CUSTDATA_MAX) +/* Service Uart0 Communication Deal */ +#define FRAME_ONE_DATA_LENTH 4 +#define FRAME_ONE_CHAR_LENTH 1 +#define FRAME_RECV_DATA_LENTH 4 +#define FRAME_LENTH 20 /* Data length */ +#define FRAME_SENT 0X8F +#define FRAME_CUSTACK 0X8A +#define FRAME_START 0x0F /* Start frame */ +#define FRAME_END '/' /* StOP frame */ +#define FRAME_CHECK_BEGIN 1 /* Check frame */ +#define FRAME_CHECKSUM 18 /* Check sum */ +#define FRAME_CHECK_NUM 17 +#define CMDCODE_IDLE_FRAME 0x55 /* Fill frame */ +#define CMDCODE_GET_MOTOR_PARAMS 0x01 +#define CMDCODE_SEND_MOTOR_PARAMS 0x02 +#define CMDCODE_SET_MOTOR_CTLMODE 0x03 +#define CMDCODE_SET_OBSERVER_TYPE 0x04 +#define CMDCODE_SET_STARTUP_MODE 0x05 +#define CMDCODE_SET_PID_PARAMS 0x06 +#define CMDCODE_SET_STARTUP_PARAMS 0x07 +#define CMDCODE_SET_OBSERVER_PARAMS 0x08 +#define CMDCODE_SET_MOTOR_TARGETSPD 0x09 +#define CMDCODE_SET_MOTOR_PARAMS 0x0A +#define CMDCODE_MOTOR_START 0x0B +#define CMDCODE_MOTOR_STOP 0x0C +#define CMDCODE_MOTORSTATE_RESET 0x0D +#define CMDCODE_SEND_FIRMVERSION 0x0E +#define CMDCODE_SET_ADJUSTSPD_MODE 0x11 +#define CMDCODE_UART_HANDSHAKE 0x12 +#define CMDCODE_UART_HEARTDETECT 0x13 + +typedef union { + unsigned char typeCh[4]; + float typeF; + int typeI; +} UNIONDATATYPE_DEF; + +typedef enum { + OFFLINE_RES = 0, + OFFLINE_LD, + OFFLINE_LQ, + OFFLINE_PSIF, + OFFLINE_JS, + OFFLINE_NP, + OFFLINE_B, + OFFLINE_KPD, + OFFLINE_KID, + OFFLINE_KPQ, + OFFLINE_KIQ, + OFFLINE_KPS, + OFFLINE_KIS, + OFFLINE_SPEED, + OFLINE_MAX +} OFFLINE_IDEN_TYPE; + +typedef enum { + CURRDQ_Q = 0, + CURRDQ_D, + CURRREFDQ_Q, + CURRREFDQ_D, + CURRSPD, + SPDCMDHZ, + UDC, + POWERBOARDTEMP, + CUST_ERR_CODE, + CURRUVW_U, + CURRUVW_V, + CURRUVW_W, + PWMDUTYUVW_U, + PWMDUTYUVW_V, + PWMDUTYUVW_W, + AXISANGLE, + VDQ_Q, + VDQ_D, + SPDREFHZ, + SENDTIMESTAMP, + CUSTDATA_MAX +} SENDTOHOSTPARAMS; + +typedef struct { + volatile unsigned char code; + volatile UNIONDATATYPE_DEF data[SEND_FRAME_DATA_NUM]; +} CUSTDATATYPE_DEF; + + +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf); +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams); +#endif /* McsMagicTag_PORTOCOL_H */ diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c new file mode 100644 index 00000000..df5e9186 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c @@ -0,0 +1,184 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#include "uart_module.h" +#include "debug.h" +#include "main.h" +#include "baseinc.h" + +/* Buffer size */ +#define UI_TX_BUF_LEN (96) +#define UI_RX_BUF_LEN (96) + +/* Receiving Timeout Interval */ +#define UART_TIME_OUT_MS (100) + +/* Start sending data to host delay after uart connect success */ +#define UART_UPDATA_DELAY_TIME_MS (50) + +/* Data buffer */ +unsigned char g_uartRxBuf[UI_RX_BUF_LEN] = {0}; +unsigned char g_uartTxBuf[UI_TX_BUF_LEN] = {0}; +static unsigned int getdeltaSystickCnt = 0; +static FRAME_Handle g_uartFrame; +/** + * @brief Receive Data Clear. + * @param uartFrame Receice Data. + * @retval None. + */ +static void FrameRecvClear(FRAME_Handle *uartFrame) +{ + /* Clear buffer lenth. */ + uartFrame->buffLen = 0; + uartFrame->timeOutCnt = 0; + uartFrame->frameFlag = 0; + /* Clear received data lenth. */ + uartFrame->rxLen = 0; + /* Clear received flag. */ + uartFrame->rxFlag = 0; + uartFrame->upDataCnt = 0; + uartFrame->rxAckFlag = 0; +} + +/** + * @brief Set Dma status. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void SetUartDmaStatus(MTRCTRL_Handle *mtrCtrl) +{ + /* Delay 50ms start uart Tx DMA . */ + if (mtrCtrl->uartConnectFlag == CONNECTING && g_uartFrame.upDataDelayCnt++ > UART_UPDATA_DELAY_TIME_MS) { + g_uartFrame.txFlag = 1; /* Start send data flag. */ + mtrCtrl->uartConnectFlag = CONNECTED; + g_uartFrame.upDataDelayCnt = 0; + } + if (mtrCtrl->uartConnectFlag == DISCONNECT) { + g_uartFrame.txFlag = 0; /* Stop send data flag. */ + mtrCtrl->uartTimeStamp = 0; + } +} + +/** + * @brief Uart Dma interupt callback func. + * @param handle Uart handle. + * @retval None. + */ +void UART0_TXDMACallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + unsigned int getCurSystickCnt = 0; + static unsigned int getlastSystickCnt = 0; + /* USER CODE BEGIN UART0_WRITE_DMA_FINISH */ + g_uartFrame.txFlag = 1; + /* Received information answered, information update reserved. */ + if (g_uartFrame.rxAckFlag == 1) { + g_uartFrame.uartItTxFlag = 1; + g_uartFrame.rxAckFlag = 0; + } + getCurSystickCnt = DCL_SYSTICK_GetTick(); + if (getlastSystickCnt != 0) { + /* Calculate unit frame data send time */ + getdeltaSystickCnt = getCurSystickCnt - getlastSystickCnt; + } + getlastSystickCnt = getCurSystickCnt; + /* USER CODE END UART0_WRITE_DMA_FINISH */ +} + +/** + * @brief Uart0 Interruput Read CallBack Function. + * @param handle Uart handle. + * @retval None. + */ +void UART0ReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_READ_IT_FINISH */ + if (g_uartFrame.rxLen >= UI_RX_BUF_LEN - 1) { + g_uartFrame.rxLen = 0; + } + HAL_UART_ReadIT(handle, &g_uartFrame.rxData, 1); + g_uartRxBuf[g_uartFrame.rxLen] = g_uartFrame.rxData; + g_uartFrame.rxLen++; + g_uartFrame.rxFlag = 1; + g_uartFrame.uartItTxFlag = 0; + return; + /* USER CODE END UART0_READ_IT_FINISH */ +} + +/** + * @brief Uart Read Data Init Function. + * @param void. + * @retval None. + */ +void UartRecvInit(void) +{ + /* Uart reception initialization */ + FrameRecvClear(&g_uartFrame); + HAL_UART_ReadIT(&g_uart0, &g_uartFrame.rxData, 1); +} + +/** + * @brief Uart Read Data Process Function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SetUartDmaStatus(mtrCtrl); + if (g_uartFrame.rxFlag == 1) { /* Receive data flag. */ + if (g_uartFrame.timeOutCnt++ > UART_TIME_OUT_MS) { + /* Received data from the host. */ + g_uartFrame.frameFlag = 1; + g_uartFrame.rxFlag = 0; + g_uartFrame.timeOutCnt = 0; + /* Execute data process. */ + CUST_DataReceProcss(mtrCtrl, g_uartRxBuf); + g_uartFrame.rxAckFlag = 1; + g_uartFrame.rxLen = 0; + } + } + g_uartFrame.frameFlag = 0; +} + +/** + * @brief Uart Write Data Process Function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + if (g_uartFrame.txFlag == 1) { /* Send data flag. */ + mtrCtrl->uartTimeStamp = (float)getdeltaSystickCnt; /* Unit data time stamp */ + g_uartFrame.upDataCnt = 0; + g_uartFrame.txFlag = 0; + /* Send data to host. */ + unsigned int txLen = CUST_TransmitData(mtrCtrl, g_uartTxBuf); + /* If txIT mode send data finish, convert to DMA mode */ + if (g_uartFrame.uartItTxFlag == 1) { + HAL_UART_WriteDMA(&g_uart0, g_uartTxBuf, txLen); + } + } +} diff --git a/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h new file mode 100644 index 00000000..f1f8f899 --- /dev/null +++ b/vendor/yibaina_3061M/AS5600_IIC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h @@ -0,0 +1,47 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#ifndef McsMagicTag_UART_MODULE_H +#define McsMagicTag_UART_MODULE_H + +#include "protocol.h" +#include "mcs_ctlmode_config.h" + +typedef struct { + unsigned int buffLen; + unsigned int timeOutCnt; + unsigned char frameFlag; + unsigned int rxLen; + unsigned char rxFlag; + unsigned char txFlag; + unsigned char rxData; + unsigned int upDataCnt; + unsigned int upDataDelayCnt; + unsigned char uartItTxFlag; + unsigned char rxAckFlag; +} FRAME_Handle; + + +void UartRecvInit(void); +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl); +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/readme.md b/vendor/yibaina_3061M/E7050_FOC/readme.md new file mode 100644 index 00000000..18434e31 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/readme.md @@ -0,0 +1,20 @@ +# E7050_foc + +**【功能描述】** + +- 基于ECMCU105H/ECBMCU201MPC单板的单电机双电阻采样的无感Foc应用 + +**【环境要求】** + +- 所有单板电源改制为演示用的24V低压,电机选用E7050 +- 电机(黄绿蓝)相线分别对应功率板上U/V/W通道接口 + +**【配置方法】** + +- 将user文件夹替换原工程文件夹即可 + +【操作说明】 + +- 点击开发板按键启动电机 + +- 开发板蓝色电位器,可以调节电机转动的快慢。(5-29HZ) \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/generatecode/feature.h b/vendor/yibaina_3061M/E7050_FOC/user/generatecode/feature.h new file mode 100644 index 00000000..715371be --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/generatecode/feature.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-14 14:05:10 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define CHIP_3061MNPICA MACRO_ENABLE + +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 30000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_UART_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/generatecode/main.h b/vendor/yibaina_3061M/E7050_FOC/user/generatecode/main.h new file mode 100644 index 00000000..40d65b1d --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/generatecode/main.h @@ -0,0 +1,98 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.h + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-14 14:05:10 + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_SYSTEM_INIT_H +#define McuMagicTag_SYSTEM_INIT_H + +#include "adc.h" +#include "adc_ex.h" +#include "acmp.h" +#include "acmp_ex.h" +#include "apt.h" +#include "uart.h" +#include "uart_ex.h" +#include "gpio.h" +#include "timer.h" +#include "timer_ex.h" +#include "pga.h" +#include "crg.h" +#include "dma.h" +#include "dma_ex.h" +#include "iocmg.h" + +#define IO_SPEED_FAST 0x00U +#define IO_SPEED_SLOW 0x01U + +#define IO_DRV_LEVEL4 0x00U +#define IO_DRV_LEVEL3 0x01U +#define IO_DRV_LEVEL2 0x02U +#define IO_DRV_LEVEL1 0x03U + +#define XTAL_DRV_LEVEL4 0x03U +#define XTAL_DRV_LEVEL3 0x02U +#define XTAL_DRV_LEVEL2 0x01U +#define XTAL_DRV_LEVEL1 0x00U + +#define GpioStartStop_PIN GPIO_PIN_4 +#define GpioStartStop_HANDLE g_gpio2 + +extern ACMP_Handle g_acmp0; +extern PGA_Handle g_pga0; +extern PGA_Handle g_pga1; +extern TIMER_Handle g_timer0; +extern TIMER_Handle g_timer1; +extern UART_Handle g_uart0; +extern APT_Handle g_apt0; +extern APT_Handle g_apt1; +extern APT_Handle g_apt2; +extern ADC_Handle g_adc0; + +extern DMA_Handle g_dmac; + +extern GPIO_Handle g_gpio2; +extern GPIO_Handle g_gpio1; + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect); +void SystemInit(void); + +void UART0WriteInterruptCallback(void *handle); +void UART0ReadInterruptCallback(void *handle); + +void UART0InterruptErrorCallback(void *handle); +void MotorStatemachineCallBack(void *handle); +void TIMER1_DMAOverFlow_InterruptProcess(void *handle); +void CheckPotentiometerValueCallback(void *handle); +void TIMER0_DMAOverFlow_InterruptProcess(void *handle); +void MotorCarrierProcessCallback(void *aptHandle); +void MotorSysErrCallback(void *aptHandle); + +void UART0_TXDMACallback(void *handle); + +void MotorStartStopKeyCallback(void *param); + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_SYSTEM_INIT_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/generatecode/system_init.c b/vendor/yibaina_3061M/E7050_FOC/user/generatecode/system_init.c new file mode 100644 index 00000000..d49cd860 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/generatecode/system_init.c @@ -0,0 +1,677 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file system_init.c + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-14 14:05:10 + */ + +#include "main.h" +#include "ioconfig.h" +#include "iocmg_ip.h" + +#define UART0_BAUD_RATE 1843200 + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) +{ + CRG_Handle crg; + crg.baseAddress = CRG; + crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC; + crg.pllPreDiv = CRG_PLL_PREDIV_4; + crg.pllFbDiv = 48; /* PLL Multiplier 48 */ + crg.pllPostDiv = CRG_PLL_POSTDIV_2; + crg.coreClkSelect = CRG_CORE_CLK_SELECT_PLL; + crg.handleEx.pllPostDiv2 = CRG_PLL_POSTDIV2_3; + crg.handleEx.clk1MSelect = CRG_1M_CLK_SELECT_HOSC; + crg.handleEx.clk1MDiv = (25 - 1); /* The 1 MHz freq is equal to the input clock frequency / (clk_1m_div + 1). 25 is the div of the clk_1m in CLOCK. */ + + if (HAL_CRG_Init(&crg) != BASE_STATUS_OK) { + return BASE_STATUS_ERROR; + } + *coreClkSelect = crg.coreClkSelect; + return BASE_STATUS_OK; +} + +static void DMA_Channel0Init(void *handle) +{ + DMA_ChannelParam dma_param; + dma_param.direction = DMA_MEMORY_TO_PERIPH_BY_DMAC; + dma_param.srcAddrInc = DMA_ADDR_INCREASE; + dma_param.destAddrInc = DMA_ADDR_UNALTERED; + dma_param.srcPeriph = DMA_REQUEST_MEM; + dma_param.destPeriph = DMA_REQUEST_UART0_TX; + dma_param.srcWidth = DMA_TRANSWIDTH_BYTE; + dma_param.destWidth = DMA_TRANSWIDTH_BYTE; + dma_param.srcBurst = DMA_BURST_LENGTH_1; + dma_param.destBurst = DMA_BURST_LENGTH_1; + dma_param.pHandle = handle; + HAL_DMA_InitChannel(&g_dmac, &dma_param, DMA_CHANNEL_ZERO); +} + +static void DMA_Init(void) +{ + HAL_CRG_IpEnableSet(DMA_BASE, IP_CLK_ENABLE); + g_dmac.baseAddress = DMA; + IRQ_Register(IRQ_DMA_TC, HAL_DMA_IrqHandlerTc, &g_dmac); + IRQ_Register(IRQ_DMA_ERR, HAL_DMA_IrqHandlerError, &g_dmac); + IRQ_EnableN(IRQ_DMA_TC); + IRQ_EnableN(IRQ_DMA_ERR); + HAL_DMA_Init(&g_dmac); + DMA_Channel0Init((void *)(&g_uart0)); + HAL_DMA_SetChannelPriorityEx(&g_dmac, DMA_CHANNEL_ZERO, DMA_PRIORITY_HIGHEST); +} + +static void ACMP0_Init(void) +{ + HAL_CRG_IpEnableSet(ACMP0_BASE, IP_CLK_ENABLE); /* ACMP clock bit reset. */ + g_acmp0.baseAddress = ACMP0_BASE; + g_acmp0.inOutConfig.inputNNum = ACMP_INPUT_N_SELECT2; + g_acmp0.inOutConfig.inputPNum = ACMP_INPUT_P_SELECT2; + g_acmp0.inOutConfig.polarity = ACMP_OUT_NOT_INVERT; + g_acmp0.filterCtrl.filterMode = ACMP_FILTER_NONE; + g_acmp0.hysteresisVol = ACMP_HYS_VOL_30MV; + g_acmp0.interruptEn = BASE_CFG_UNSET; + HAL_ACMP_Init(&g_acmp0); +} + +static void ADC0_Init(void) +{ + HAL_CRG_IpEnableSet(ADC0_BASE, IP_CLK_ENABLE); + HAL_CRG_IpClkSelectSet(ADC0_BASE, CRG_ADC_CLK_ASYN_PLL_DIV); + HAL_CRG_IpClkDivSet(ADC0_BASE, CRG_ADC_DIV_1); + + g_adc0.baseAddress = ADC0; + g_adc0.socPriority = ADC_PRIMODE_ALL_ROUND; + + HAL_ADC_Init(&g_adc0); + + SOC_Param socParam = {0}; + socParam.adcInput = ADC_CH_ADCINA0; /* PGA0_OUT(ADC AIN0) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM1, &socParam); + + socParam.adcInput = ADC_CH_ADCINA1; /* PGA1_OUT(ADC AIN1) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM6, &socParam); + + socParam.adcInput = ADC_CH_ADCINA9; /* PIN7(ADC AIN9) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM0, &socParam); + + socParam.adcInput = ADC_CH_ADCINA5; /* PIN2(ADC AIN5) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM3, &socParam); + + socParam.adcInput = ADC_CH_ADCINA15; /* PIN14(ADC AIN15) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_22CLK; /* adc sample total time 22 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM4, &socParam); +} + +__weak void MotorSysErrCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_EVENT_INTERRUPT */ + /* USER CODE END APT0_EVENT_INTERRUPT */ +} + +__weak void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +static void APT0_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_ENABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt0, &protectApt); +} + +static void APT0_Init(void) +{ + HAL_CRG_IpEnableSet(APT0_BASE, IP_CLK_ENABLE); + + g_apt0.baseAddress = APT0; + + /* Clock Settings */ + g_apt0.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt0.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt0.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt0.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt0.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.divInitVal = 0; + g_apt0.waveform.cntInitVal = 0; + g_apt0.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt0.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt0.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt0.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt0.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCA = 375; /* 375 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt0.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCA = 1; + + /* ADC Trigger SOCB */ + g_apt0.adcTrg.trgEnSOCB = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCB = 1; + g_apt0.adcTrg.trgSrcSOCB = APT_CS_SRC_CNTR_CMPB_DOWN; + g_apt0.adcTrg.trgScaleSOCB = 1; + + g_apt0.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + /* Timer Trigger */ + g_apt0.tmrInterrupt.tmrInterruptEn = BASE_CFG_ENABLE; + g_apt0.tmrInterrupt.tmrInterruptSrc = APT_INT_SRC_CNTR_ZERO; + g_apt0.tmrInterrupt.tmrInterruptScale = 1; + + APT0_ProtectInit(); + + HAL_APT_PWMInit(&g_apt0); + HAL_APT_RegisterCallBack(&g_apt0, APT_EVENT_INTERRUPT, MotorSysErrCallback); + IRQ_SetPriority(IRQ_APT0_EVT, 7); /* 7 is priority value */ + IRQ_Register(IRQ_APT0_EVT, HAL_APT_EventIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_EVT); + HAL_APT_RegisterCallBack(&g_apt0, APT_TIMER_INTERRUPT, MotorCarrierProcessCallback); + IRQ_SetPriority(IRQ_APT0_TMR, 5); /* 5 is priority value */ + IRQ_Register(IRQ_APT0_TMR, HAL_APT_TimerIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_TMR); +} + +static void APT1_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt1, &protectApt); +} + +static void APT1_Init(void) +{ + HAL_CRG_IpEnableSet(APT1_BASE, IP_CLK_ENABLE); + + g_apt1.baseAddress = APT1; + + /* Clock Settings */ + g_apt1.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt1.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt1.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt1.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt1.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.divInitVal = 0; + g_apt1.waveform.cntInitVal = 0; + g_apt1.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt1.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt1.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt1.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + APT1_ProtectInit(); + + HAL_APT_PWMInit(&g_apt1); +} + +static void APT2_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt2, &protectApt); +} + +static void APT2_Init(void) +{ + HAL_CRG_IpEnableSet(APT2_BASE, IP_CLK_ENABLE); + + g_apt2.baseAddress = APT2; + + /* Clock Settings */ + g_apt2.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt2.waveform.timerPeriod = 7500; /* 7500 is count period of APT time-base timer */ + g_apt2.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt2.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt2.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.divInitVal = 0; + g_apt2.waveform.cntInitVal = 0; + g_apt2.waveform.cntCmpLeftEdge = 500; /* 500 is count compare point of the left edge of PWM waveform */ + g_apt2.waveform.cntCmpRightEdge = 4000; /* 4000 is count compare point of the right edge of PWM waveform */ + g_apt2.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt2.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt2.waveform.deadBandCnt = 225; /* 225 is dead-band value */ + + APT2_ProtectInit(); + + HAL_APT_PWMInit(&g_apt2); +} + +__weak void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + BASE_FUNC_UNUSED(handle); +} + +static void GPIO_Init(void) +{ + HAL_CRG_IpEnableSet(GPIO2_BASE, IP_CLK_ENABLE); + g_gpio2.baseAddress = GPIO2; + + g_gpio2.pins = GPIO_PIN_3; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_NONE); + + g_gpio2.pins = GPIO_PIN_4; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_INPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_LOW_LEVEL); + + HAL_CRG_IpEnableSet(GPIO1_BASE, IP_CLK_ENABLE); + g_gpio1.baseAddress = GPIO1; + + g_gpio1.pins = GPIO_PIN_0; + HAL_GPIO_Init(&g_gpio1); + HAL_GPIO_SetDirection(&g_gpio1, g_gpio1.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio1, g_gpio1.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio1, g_gpio1.pins, GPIO_INT_TYPE_NONE); + + HAL_GPIO_RegisterCallBack(&g_gpio2, GPIO_PIN_4, MotorStartStopKeyCallback); + IRQ_Register(IRQ_GPIO2, HAL_GPIO_IrqHandler, &g_gpio2); + IRQ_SetPriority(IRQ_GPIO2, 1); /* set gpio1 interrupt priority to 1, 1~15. 1 is priority value */ + IRQ_EnableN(IRQ_GPIO2); /* gpio interrupt enable */ + + return; +} + +static void PGA0_Init(void) +{ + HAL_CRG_IpEnableSet(PGA0_BASE, IP_CLK_ENABLE); + + g_pga0.baseAddress = PGA0_BASE; + g_pga0.externalResistorMode = BASE_CFG_ENABLE; + g_pga0.handleEx.extCapCompensation = PGA_EXT_COMPENSATION_2X; + HAL_PGA_Init(&g_pga0); +} + +static void PGA1_Init(void) +{ + HAL_CRG_IpEnableSet(PGA1_BASE, IP_CLK_ENABLE); + + g_pga1.baseAddress = PGA1_BASE; + g_pga1.externalResistorMode = BASE_CFG_ENABLE; + g_pga1.handleEx.extCapCompensation = PGA_EXT_COMPENSATION_2X; + HAL_PGA_Init(&g_pga1); +} + +__weak void CheckPotentiometerValueCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN CheckPotentiometerValueCallback */ + /* USER CODE END CheckPotentiometerValueCallback */ +} + +static void TIMER0_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER0_BASE, IP_CLK_ENABLE); /* TIMER0 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER0) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 1000000; + + g_timer0.baseAddress = TIMER0; + g_timer0.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer0.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer0.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer0.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer0.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer0.interruptEn = BASE_CFG_ENABLE; + g_timer0.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer0.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer0); + IRQ_Register(IRQ_TIMER0, HAL_TIMER_IrqHandler, &g_timer0); + + HAL_TIMER_RegisterCallback(&g_timer0, TIMER_PERIOD_FIN, CheckPotentiometerValueCallback); + IRQ_SetPriority(IRQ_TIMER0, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_TIMER0); +} + +__weak void MotorStatemachineCallBack(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN MotorStatemachineCallBack */ + /* USER CODE END MotorStatemachineCallBack */ +} + +static void TIMER1_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER1_BASE, IP_CLK_ENABLE); /* TIMER1 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER1) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 500; + + g_timer1.baseAddress = TIMER1; + g_timer1.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer1.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer1.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer1.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer1.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer1.interruptEn = BASE_CFG_ENABLE; + g_timer1.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer1.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer1); + IRQ_Register(IRQ_TIMER1, HAL_TIMER_IrqHandler, &g_timer1); + + HAL_TIMER_RegisterCallback(&g_timer1, TIMER_PERIOD_FIN, MotorStatemachineCallBack); + IRQ_SetPriority(IRQ_TIMER1, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_TIMER1); +} + +__weak void UART0InterruptErrorCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_TRNS_IT_ERROR */ + /* USER CODE END UART0_TRNS_IT_ERROR */ +} + +__weak void UART0_TXDMACallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_WRITE_DMA_FINISH */ + /* USER CODE END UART0_WRITE_DMA_FINISH */ +} + +__weak void UART0WriteInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_WRITE_IT_FINISH */ + /* USER CODE END UART0_WRITE_IT_FINISH */ +} + +__weak void UART0ReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_READ_IT_FINISH */ + /* USER CODE END UART0_READ_IT_FINISH */ +} + +static void UART0_Init(void) +{ + HAL_CRG_IpEnableSet(UART0_BASE, IP_CLK_ENABLE); /* UART0 clock enable. */ + g_uart0.baseAddress = UART0; + + g_uart0.baudRate = UART0_BAUD_RATE; + g_uart0.dataLength = UART_DATALENGTH_8BIT; + g_uart0.stopBits = UART_STOPBITS_ONE; + g_uart0.parity = UART_PARITY_NONE; + g_uart0.txMode = UART_MODE_DMA; + g_uart0.rxMode = UART_MODE_INTERRUPT; + g_uart0.fifoMode = BASE_CFG_ENABLE; + g_uart0.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart0.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart0.hwFlowCtr = BASE_CFG_DISABLE; + g_uart0.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart0.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart0); + HAL_UART_RegisterCallBack(&g_uart0, UART_TRNS_IT_ERROR, (UART_CallbackType)UART0InterruptErrorCallback); + HAL_UART_RegisterCallBack(&g_uart0, UART_READ_IT_FINISH, (UART_CallbackType)UART0ReadInterruptCallback); + IRQ_Register(IRQ_UART0, HAL_UART_IrqHandler, &g_uart0); + IRQ_SetPriority(IRQ_UART0, 6); /* 6 is priority value */ + IRQ_EnableN(IRQ_UART0); + g_uart0.dmaHandle = &g_dmac; + g_uart0.uartDmaTxChn = 0; + HAL_UART_RegisterCallBack(&g_uart0, UART_WRITE_DMA_FINISH, (UART_CallbackType)UART0_TXDMACallback); + HAL_UART_RegisterCallBack(&g_uart0, UART_WRITE_IT_FINISH, (UART_CallbackType)UART0WriteInterruptCallback); +} + +static void IOConfig(void) +{ + SYSCTRL0->SC_SYS_STAT.BIT.update_mode = 0; + SYSCTRL0->SC_SYS_STAT.BIT.update_mode_clear = 1; + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN1 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_7_AS_ACMP0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_7_AS_ACMP0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_7_AS_ACMP0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_7_AS_ACMP0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_7_AS_ACMP0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN48 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_6_AS_ACMP_N2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_6_AS_ACMP_N2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_6_AS_ACMP_N2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_6_AS_ACMP_N2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_6_AS_ACMP_N2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN47 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_5_AS_ACMP_P2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_5_AS_ACMP_P2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_5_AS_ACMP_P2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_5_AS_ACMP_P2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_5_AS_ACMP_P2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN4 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_6_AS_PGA0_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_6_AS_PGA0_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_6_AS_PGA0_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_6_AS_PGA0_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_6_AS_PGA0_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN5 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_5_AS_PGA0_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_5_AS_PGA0_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_5_AS_PGA0_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_5_AS_PGA0_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_5_AS_PGA0_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN3 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_7_AS_PGA0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_7_AS_PGA0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_7_AS_PGA0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_7_AS_PGA0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_7_AS_PGA0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN7 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_7_AS_ADC_AIN9); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_7_AS_ADC_AIN9, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_7_AS_ADC_AIN9, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_7_AS_ADC_AIN9, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_7_AS_ADC_AIN9, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN2 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO5_1_AS_ADC_AIN5); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO5_1_AS_ADC_AIN5, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO5_1_AS_ADC_AIN5, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO5_1_AS_ADC_AIN5, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO5_1_AS_ADC_AIN5, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN14 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_7_AS_ADC_AIN15); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_7_AS_ADC_AIN15, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_7_AS_ADC_AIN15, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_7_AS_ADC_AIN15, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_7_AS_ADC_AIN15, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN11 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_5_AS_PGA1_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_5_AS_PGA1_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_5_AS_PGA1_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_5_AS_PGA1_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_5_AS_PGA1_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN12 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_6_AS_PGA1_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_6_AS_PGA1_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_6_AS_PGA1_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_6_AS_PGA1_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_6_AS_PGA1_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN13 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_7_AS_PGA1_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_7_AS_PGA1_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_7_AS_PGA1_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_7_AS_PGA1_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_7_AS_PGA1_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN35 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_3_AS_GPIO2_3); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_3_AS_GPIO2_3, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_3_AS_GPIO2_3, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_3_AS_GPIO2_3, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_3_AS_GPIO2_3, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN27 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_0_AS_GPIO1_0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_0_AS_GPIO1_0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_0_AS_GPIO1_0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_0_AS_GPIO1_0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_0_AS_GPIO1_0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN41 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_4_AS_GPIO2_4); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_4_AS_GPIO2_4, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_4_AS_GPIO2_4, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_4_AS_GPIO2_4, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_4_AS_GPIO2_4, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN19 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_0_AS_APT0_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_0_AS_APT0_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_0_AS_APT0_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_0_AS_APT0_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_0_AS_APT0_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN23 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_0_AS_APT0_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_0_AS_APT0_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_0_AS_APT0_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_0_AS_APT0_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_0_AS_APT0_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN20 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_1_AS_APT1_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_1_AS_APT1_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_1_AS_APT1_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_1_AS_APT1_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_1_AS_APT1_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN24 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_1_AS_APT1_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_1_AS_APT1_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_1_AS_APT1_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_1_AS_APT1_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_1_AS_APT1_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN21 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_2_AS_APT2_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_2_AS_APT2_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_2_AS_APT2_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_2_AS_APT2_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_2_AS_APT2_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN25 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_2_AS_APT2_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_2_AS_APT2_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_2_AS_APT2_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_2_AS_APT2_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_2_AS_APT2_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ +} + +static void APT_SyncMasterInit(void) +{ + HAL_APT_MasterSyncInit(&g_apt0, APT_SYNC_OUT_ON_CNTR_ZERO); +} + +static void APT_SyncSlaveInit(void) +{ + APT_SlaveSyncIn aptSlave; + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt1, &aptSlave); + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt2, &aptSlave); + +} + +void SystemInit(void) +{ + IOConfig(); + DMA_Init(); + UART0_Init(); + ACMP0_Init(); + APT0_Init(); + APT1_Init(); + APT2_Init(); + ADC0_Init(); + PGA0_Init(); + PGA1_Init(); + TIMER0_Init(); + TIMER1_Init(); + GPIO_Init(); + + APT_SyncMasterInit(); + APT_SyncSlaveInit(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/main.c b/vendor/yibaina_3061M/E7050_FOC/user/main.c new file mode 100644 index 00000000..d6ab767c --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/main.c @@ -0,0 +1,71 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + * @date 2025-04-14 14:05:10 + */ + +#include "typedefs.h" +#include "feature.h" +#include "mcs_motor_process.h" +#include "main.h" +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ +/* USER CODE END 0 */ +ACMP_Handle g_acmp0; +PGA_Handle g_pga0; +PGA_Handle g_pga1; +TIMER_Handle g_timer0; +TIMER_Handle g_timer1; +UART_Handle g_uart0; +APT_Handle g_apt0; +APT_Handle g_apt1; +APT_Handle g_apt2; +ADC_Handle g_adc0; +DMA_Handle g_dmac; +GPIO_Handle g_gpio2; +GPIO_Handle g_gpio1; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ +/* USER CODE END 1 */ + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + /* USER CODE END 2 */ + MotorMainProcess(); + /* USER CODE BEGIN 3 */ + /* 建议用户放置初始配置代码 */ + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + /* 建议用户放置周期性执行代码 */ + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h new file mode 100644 index 00000000..dea3ad66 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h @@ -0,0 +1,142 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration for carrier interrupt processing function. + */ +#ifndef McuMagicTag_MCS_CARRIER_H +#define McuMagicTag_MCS_CARRIER_H + +#include "mcs_status.h" +#include "mcs_mtr_param.h" +#include "mcs_svpwm.h" +#include "mcs_curr_ctrl.h" +#include "mcs_if_ctrl.h" +#include "mcs_ramp_mgmt.h" +#include "mcs_spd_ctrl.h" +#include "mcs_fosmo.h" +#include "mcs_smo_4th.h" +#include "mcs_pll.h" +#include "mcs_startup.h" +#include "mcs_r1_svpwm.h" +#include "mcs_fw_ctrl.h" +#include "mcs_prot_user.h" + +typedef void (*MCS_ReadCurrUvwCb)(UvwAxis *CurrUvw); +typedef void (*MCS_SetPwmDutyCb)(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight); +typedef void (*MCS_SetADCTriggerTimeCb)(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB); + +/** + * @brief motor control FSM state define. + * @details motor control FSM state type: + * + FSM_IDLE -- IDLE state, system startup default. + * + FSM_OFFSET_CALIB -- Self calibrate, for ADC init. + * + FSM_CAP_CHARGE -- IPM cap charge. + * + FSM_CLEAR -- Clear before every run. + * + FSM_LOCATE -- Rotor position pre-locate. + * + FSM_STARTUP -- Start up. + * + FSM_SWITCH -- Transition state, control from open to closed loop. + * + FSM_RUN -- Normal running state. + * + FSM_WAIT_STOP -- Wait stopping. + * + FSM_STOP -- Normal stop. + * + FSM_FAULT -- Fault state, waiting for user process. + */ +typedef enum { + FSM_IDLE = 0, + FSM_OFFSET_CALIB, + FSM_CAP_CHARGE, + FSM_CLEAR, + FSM_LOCATE, + FSM_STARTUP, + FSM_SWITCH, + FSM_RUN, + FSM_WAIT_STOP, + FSM_STOP, + FSM_FAULT +} FsmState; + +/** + * @brief Sampling mode. + */ +typedef enum { + DUAL_RESISTORS = 0, + SINGLE_RESISTOR = 1 +} SampleMode; + +/** + * @brief Motor control data structure + */ +typedef struct { + unsigned char motorStateFlag; /**< Motor start/stop status flag. */ + float spdCmdHz; /**< External input speed command value. */ + float axisAngle; /**< Angle of the synchronous coordinate system. */ + float spdRefHz; /**< Command value after speed ramp management. */ + float currCtrlPeriod; /**< current loop control period. */ + float adc0Compensate; /**< ADC0 softwaretrim compensate value. */ + float adc1Compensate; /**< ADC1 softwaretrim compensate value. */ + float udc; /**< Bus voltage. */ + float powerBoardTemp; /**< Power boart surface temperature. */ + unsigned short aptMaxcntCmp; /**< Apt Maximum Comparison Count. */ + float adcCurrCofe; /**< Adc current sampling cofeature. */ + + unsigned short sysTickCnt; /**< System Timer Tick Count. */ + unsigned short capChargeTickNum; /**< Bootstrap Capacitor Charge Tick Count. */ + volatile unsigned int msTickCnt; /**< Millisecond-level counter, which can be used in 1-ms and 5-ms tasks. */ + unsigned short msTickNum; /**< Number of ticks corresponding to 1 ms. */ + char obserType; /**< Set Observer Type. */ + char controlMode; /**< Set foc control or sixstep bldc control mode or others. */ + char spdAdjustMode; /**< Set speed adjust mode. */ + char uartConnectFlag; /**< Uart connect success flag. */ + short uartHeartDetCnt; /**< Uart connect heart detect count. */ + float uartTimeStamp; /**< Uart data time stamp. */ + SysStatusReg statusReg; /**< System status. */ + FsmState stateMachine; /**< Motor Control State Machine. */ + + SampleMode sampleMode; /**< Current sampling mode setting: single resistor, double resistor. */ + MOTOR_Param mtrParam; /**< Motor parameters. */ + FOSMO_Handle smo; /**< SMO observer handle. */ + SMO4TH_Handle smo4th; /**< SMO 4th observer handle. */ + IF_Handle ifCtrl; /**< I/F control handle. */ + SVPWM_Handle sv; /**< Dual-resistance/three-resistance sampling SVPWM Handle. */ + R1SVPWM_Handle r1Sv; /**< Single-resistance phase-shifted SVPWM handle. */ + RMG_Handle spdRmg; /**< Ramp management struct for the speed controller input reference. */ + SPDCTRL_Handle spdCtrl; /**< Speed loop Control Handle. */ + CURRCTRL_Handle currCtrl; /**< Current loop control handle. */ + STARTUP_Handle startup; /**< Startup Switch Handle. */ + FW_Handle fw; /**< Flux-Weakening Handle. */ + + DqAxis idqRef; /**< Command value of the dq axis current. */ + UvwAxis currUvw; /**< Three-phase current sampling value. */ + AlbeAxis iabFbk; /**< αβ-axis current feedback value. */ + DqAxis idqFbk; /**< Current feedback value of the dq axis. */ + DqAxis vdqRef; /**< Current loop output dq voltage. */ + AlbeAxis vabRef; /**< Current loop output voltage αβ. */ + UvwAxis dutyUvw; /**< UVW three-phase duty cycle. */ + UvwAxis dutyUvwLeft; /**< Single Resistor UVW Three-Phase Left Duty Cycle. */ + UvwAxis dutyUvwRight; /**< Single Resistor UVW Three-Phase Right Duty Cycle. */ + + MCS_ReadCurrUvwCb readCurrUvwCb; /**< Read current callback function. */ + MCS_SetPwmDutyCb setPwmDutyCb; /**< Set the duty cycle callback function. */ + MCS_SetADCTriggerTimeCb setADCTriggerTimeCb; /**< Sets the ADC trigger point callback function. */ + + MotorProtStatus_Handle prot; /**< Motor protect status detection flag bit handle. */ +} MTRCTRL_Handle; + +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h new file mode 100644 index 00000000..38c00b5d --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h @@ -0,0 +1,76 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_chip_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H/ECBMCU201MPC app. + */ + +#ifndef McuMagicTag_MCS_CHIPCONFIG_H +#define McuMagicTag_MCS_CHIPCONFIG_H + +#include "feature.h" + +#if defined (CHIP_3061MNPICA) || defined (CHIP_3061MNPIKA) || defined (CHIP_3061MNNICA) || \ + defined (CHIP_3061MNNIKA) || defined (CHIP_3061MNPIC8) || defined(CHIP_3061MNNIC8) || \ + defined (CHIP_3061MNPIK8) || defined (CHIP_3061MNNIK8) + + #define ADCPTT_HANDLE g_adc0 + #define ADCRESIS_HANDLE g_adc0 + #define ADCUDC_HANDLE g_adc0 + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc0 + #define LED1_HANDLE g_gpio2 + #define LED2_HANDLE g_gpio1 + #define LED2_PIN GPIO_PIN_0 + #define LED1_PIN GPIO_PIN_3 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCUSOCNUM ADC_SOC_NUM1 + #define ADCRESISSOCNUM ADC_SOC_NUM3 + #define ADCUDCSOCNUM ADC_SOC_NUM4 + #define ADCWSOCNUM ADC_SOC_NUM6 + + #define ADC0COMPENSATE 2037.0f + #define ADC1COMPENSATE 2027.0f + +#endif + +#if defined (CHIP_3065HRPIRZ) || defined (CHIP_3065ARPIRZ) || defined (CHIP_3066MNPIRH) || \ + defined (CHIP_3065PNPIRH) || defined (CHIP_3065PNPIRE) || defined (CHIP_3065PNPIRA) + + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc1 + #define ADCRESIS_HANDLE g_adc2 + #define ADCUDC_HANDLE g_adc2 + #define ADCPTT_HANDLE g_adc2 + #define LED1_HANDLE g_gpio0 + #define LED2_HANDLE g_gpio0 + #define LED2_PIN GPIO_PIN_6 + #define LED1_PIN GPIO_PIN_7 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCRESISSOCNUM ADC_SOC_NUM1 + #define ADCUSOCNUM ADC_SOC_NUM8 + #define ADCWSOCNUM ADC_SOC_NUM8 + #define ADCUDCSOCNUM ADC_SOC_NUM14 + + #define ADC0COMPENSATE 2033.0f + #define ADC1COMPENSATE 2070.0f + +#endif + + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h new file mode 100644 index 00000000..2a6f38cc --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h @@ -0,0 +1,73 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_ctlmode_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H app. + */ + + /* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_CTLMODECONFIG_H +#define McuMagicTag_MCS_CTLMODECONFIG_H + +#include "debug.h" +#include "typedefs.h" + +typedef enum { + FOC_STARTUP_IF = 0, + FOC_STARTUP_VF, + FOC_STARTUP_HFI +} MOTOR_STARTUPMODE_CONFIG; + +typedef enum { + FOC_OBSERVERTYPE_SMO1TH = 0, + FOC_OBSERVERTYPE_SMO1TH_PLL, + FOC_OBSERVERTYPE_SMO4TH, + FOC_OBSERVERTYPE_SMO4TH_PLL, + FOC_OBSERVERTYPE_LUNBORG, + FOC_OBSERVERTYPE_FLUX +} MOTOR_OBSERVERTYPE_CONFIG; + +typedef enum { + FOC_CONTROLMODE_SPEED = 0, + FOC_CONTROLMODE_TORQUE +} MOTOR_CONTROLMODE_CONFIG; + +typedef enum { + FOC_CURQAXISPID_PARAMS = 0, + FOC_CURDAXISPID_PARAMS, + FOC_SPDPID_PARAMS +} MOTOR_PID_SET; + +typedef enum { + MOTOR_PARAMS_BASE = 0, + MOTOR_PARAMS_SPECIAL, + MOTOR_PARAMS_BOARD +} MOTOR_PARAMS_SET; + +typedef enum { + CUST_SPEED_ADJUST = 0, + HOST_SPEED_ADJUST +} MODE_ADSPEED_CONFIG; + +typedef enum { + CONNECTING = 0, + CONNECTED, + DISCONNECT +} UART_STATUS; + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h new file mode 100644 index 00000000..783bf214 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h @@ -0,0 +1,45 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.h + * @author MCU Algorithm Team + * @brief This file provides motor sample functions declaration for ECMCU105H board. + */ +#ifndef McuMagicTag_MCS_MOTOR_PROCESS_H +#define McuMagicTag_MCS_MOTOR_PROCESS_H + +/** + * @brief phase sequence. + */ +typedef enum { + PHASE_U = 0, + PHASE_V, + PHASE_W, + PHASE_MAX_NUM +} MCS_PhaseEnum; + +/** + * @brief key state. + */ +typedef enum { + KEY_DOWN = 0, + KEY_UP = 1, +} KEY_State; + +int MotorMainProcess(void); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h new file mode 100644 index 00000000..19510c78 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h @@ -0,0 +1,188 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_status.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_STATUS_H +#define McuMagicTag_MCS_STATUS_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "typedefs.h" +#include "mcs_assert.h" + +/* Typedef definitions ------------------------------------------------------------------------- */ +/** + * @brief System status define + */ +typedef union { + unsigned short all; + struct { + unsigned short cmdStart : 1; /**< Indicates that a start system command has been received. */ + unsigned short cmdStop : 1; /**< Indicates that a stop system command has been received. */ + unsigned short isRunning : 1; /**< Indicates that the system is running (enable signal) */ + unsigned short sysError : 1; /**< Indicates that the system reports an error. */ + unsigned short poweron : 1; /**< Indicates that the power-on initialization phase is complete. */ + unsigned short capcharge : 1; /**< Indicates that the bootstrap capacitor charging phase is complete. */ + unsigned short adczero : 1; /**< The current sampling point is reset to zero after power-on. */ + } Bit; +} SysStatusReg; + +/** + * @brief Get status of Bit cmdStart. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStart(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStart == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStart. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStartSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 1; +} + +/** + * @brief Clear Bit cmdStart. + * @param handle System status register handle. + * @retval None. + */ +static inline void SysCmdStartClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 0; +} + +/** + * @brief Get status of Bit cmdStop. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStop(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStop == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 1; +} + +/** + * @brief Clear Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 0; +} + +/** + * @brief Get status of Bit isRunning. + * @param sysStatus System status register handle. + * @retval Status of Bit isRunning. + */ +static inline bool SysIsRunning(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.isRunning == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 1; +} + +/** + * @brief Clear Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 0; +} + +/** + * @brief Get status of Bit sysError. + * @param sysStatus System status register handle. + * @retval Status of Bit sysError. + */ +static inline bool SysIsError(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.sysError == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 1; +} + +/** + * @brief Clear Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 0; +} + +#endif diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h new file mode 100644 index 00000000..8d4cb216 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h @@ -0,0 +1,108 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_user_config.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of user config parameters. + */ +#ifndef McuMagicTag_MCS_CONFIG_H +#define McuMagicTag_MCS_CONFIG_H + +#include "debug.h" +#include "typedefs.h" + +#define SMO4TH + +#define SYSTICK_PERIOD_US 500u /* systick period. */ + +#define INV_CAP_CHARGE_MS 3u /* Capacitor charging time. */ + +#define INV_VOLTAGE_BUS 24.0f /* Bus voltage, V. */ + +#define CTRL_CURR_PERIOD 0.0001f /* carrier ISR period, 100us. */ +#define CTRL_SYSTICK_PERIOD 0.0005f /* systick control period, 500us. */ + +/* Duty of sample window, the real time is 0.06*50us = 3us. */ +#define SAMPLE_WINDOW_DUTY 0.06f + +/* Duty of sample point shift as flip point, the real time is 0.008*50us = 0.4us. */ +#define SAMPLE_POINT_SHIFT 0.008f + +/* Sampling resistance 200mOhm 0.0013295 */ +#define ADC_CURR_COFFI 0.0013295f /* 3.3/4096/3.03/0.2 pga: 3.03, 200mohm. */ + +#define APT_U APT0_BASE /* Base address of U phase APT module. */ +#define APT_V APT1_BASE /* Base address of V phase APT module. */ +#define APT_W APT2_BASE /* Base address of W phase APT module. */ + +/* FOSMO */ +#define FOSMO_GAIN 4.0f /* SMO gain */ +#define FOSMO_LAMBDA 2.0f /* SMO coefficient of cut-off frequency, its value = lambda * we. */ +#define FOSMO_EMF_CUTOFF_FREQ 2.0f /* SMO back emf cutoff frequency. */ +#define SPEED_FILTER_CUTOFF_FREQUENCY 40.0f /* SMO speed cutoff frequency of speed filter. */ +#define FOSMO_PLL_BDW 30.0f /* SMO PLL bandwidth. */ + +/* SMO4TH */ +#define SMO4TH_PLL_BDW 30.0f /* SMO4TH PLL Bandwidth. */ +#define SMO4TH_KD 300.0f /* SMO4TH parameters KD. */ +#define SMO4TH_KQ 600.0f /* SMO4TH parameters KQ. */ +#define SMO4TH_SPD_FILTER_CUTOFF_FREQ 40.0f /* SMO4TH speed cutoff frequency of speed filter. */ + +/* User_Commond */ +#define CTRL_IF_CURR_AMP_A 0.7f /* IF control current amplitude. */ +#define USER_TARGET_SPD_HZ 100.0f /* User-defined target speed value. */ +#define USER_SWITCH_SPDBEGIN_HZ 30.0f /* Start of handover interval. */ +#define USER_SWITCH_SPDEND_HZ (USER_SWITCH_SPDBEGIN_HZ + 3.0f) /* End of handover period. */ +#define USER_MAX_SPD_HZ 29.0f /* User-defined maximum speed value. */ +#define USER_MIN_SPD_HZ 5.0f /* User-defined minimum speed value. */ +#define USER_SPD_SLOPE 50.0f /* slope of velocity change. */ +#define USER_CURR_SLOPE (CTRL_IF_CURR_AMP_A * 10.0f) /* Current change slope. */ + +/* PID PARAMS */ +#define CURRQAXIS_KP 5.023202f /* Current loop Q axis Kp. */ +#define CURRQAXIS_KI 20612.84f /* Current loop Q axis Ki. */ +#define CURRDAXIS_KP 3.477114f /* Current loop D axis Kp. */ +#define CURRDAXIS_KI 20612.84f /* Current loop D axis Ki. */ +/* Current loop PID output lower limit. */ +#define CURR_LOWERLIM (-INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.98f) +/* Current loop PID output upper limit. */ +#define CURR_UPPERLIM (INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.98f) + +#define SPD_KP 0.00505f /* Speed loop Kp. */ +#define SPD_KI 0.012f /* Speed loop Ki. */ +#define SPD_LOWERLIM (-0.105f) /* Speed loop PID output lower limit. */ +#define SPD_UPPERLIM 0.105f /* Speed loop PID output upper limit. */ + +/* MOTOR PARAMS */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift. */ +/* mtrPsif & mtrJ parameter is not used in this project, temporarily set to 0. */ +#define MOTORPARAM_DEFAULTS { \ + .mtrNp = 14, \ + .mtrRs = 10.1f, \ + .mtrLd = 0.010f, \ + .mtrLq = 0.010f, \ + .mtrPsif = 0.0f, \ + .mtrJ = 0.0f, \ + .maxElecSpd = 29.0f, \ + .maxCurr = 1.0f, \ + .busVolt = INV_VOLTAGE_BUS, \ +} + +/* Bus voltage sampling conversion factor. */ +#define ADC_UDC_COFFI 0.01289f /* 0.01289 = 3.3/4096*192/12. */ + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c new file mode 100644 index 00000000..99766bdf --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c @@ -0,0 +1,43 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.c + * @author MCU Algorithm Team + * @brief This file contains protection common api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt.h" +#include "mcs_assert.h" + +/** + * @brief Safty-pulse-off function execution to turn off all the power devices. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void ProtSpo_Exec(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /**< Turn off all the six power devices of the inverter. */ + for (unsigned int i = 0; i < MOTOR_PHASE_NUMBER; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_ForcePWMOutputLow(aptx); + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h new file mode 100644 index 00000000..104a5dec --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h @@ -0,0 +1,136 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.h + * @author MCU Algorithm Team + * @brief This file contains protection function common data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_CMM_H +#define McuMagicTag_MCS_PROT_CMM_H + +#include "typedefs.h" +#include "apt_ip.h" + +/* Macro definitions --------------------------------------------------------------------------- */ +#define MOTOR_PHASE_NUMBER (3) + +#define PROT_VAL_THRESHOLD_NUMS (4) +#define PROT_VAL_THRESHOLD_0 (0) +#define PROT_VAL_THRESHOLD_1 (1) +#define PROT_VAL_THRESHOLD_2 (2) +#define PROT_VAL_THRESHOLD_3 (3) + +#define PROT_LIMIT_TIME_NUMS (3) +#define PROT_LIMIT_TIME_0 (0) +#define PROT_LIMIT_TIME_1 (1) +#define PROT_LIMIT_TIME_2 (2) + +#define MOTOR_PHASE_NUMBER (3) + +/**< Motor error status definition. */ +typedef union { + int all; + struct { + unsigned short overCurrErr : 1; /**< Indicates that phase current(s) is over protected value. */ + unsigned short overVoltErr : 1; /**< Indicates that dc-link voltage is over protected value. */ + unsigned short lowerVoltErr : 1; /**< Indicates that dc-link voltage is lower than protected value */ + unsigned short overIpmTempErr : 1; /**< Indicates that IPM temperature is over protected value. */ + unsigned short revRotErr : 1; /**< Indicates that motor negtive direction. */ + unsigned short motorStalling : 1; /**< Indicates that rotor is stalling. */ + unsigned short overMotorTempErr : 1; /**< Indicates that three phase currents is out-of-balance. */ + unsigned short posSnsrCommsErr : 1; /**< Indicates that position sensor communication is lost with MCU. */ + unsigned short posSnsrFuncErr : 1; /**< Indicates that position sensor reports function error. */ + unsigned short posSnsrCalibrErr : 1; /**< Indicates that position sensor fails to calibrate itself. */ + unsigned short currOutOfBalance : 1; /**< Indicates that the rotor is reverse rotation.*/ + unsigned short phsOpenErr : 1; /**< Indicates that phase winding(s) is open. */ + unsigned short phsU : 1; /**< Indicates that u phase fails when phsOpenErr occurs. */ + unsigned short phsV : 1; /**< Indicates that v phase fails when phsOpenErr occurs. */ + unsigned short phsW : 1; /**< Indicates that w phase fails when phsOpenErr occurs. */ + unsigned short multiPhs : 1; /**< Indicates that multi-phases fail when phsOpenErr occurs.*/ + } Bit; +} MotorErrStatusReg; + +/**< Protection Status Bit Definition */ +typedef enum { + OCP_ERR_BIT, + OVP_ERR_BIT, + LVP_ERR_BIT, + OTP_IPM_ERR_BIT, + OTP_MOTOR_ERR_BIT, + STALLING_ERR_BIT, + CURR_OUT_BALANCE_ERR_BIT, + POS_COMMS_ERR_BIT, + POS_FUNC_ERR_BIT, + POS_CALIB_ERR_BIT, + REV_ROT_ERR_BIT, + PHS_OPEN_ERR_BIT, + PHS_U_ERR_BIT, + PHS_V_ERR_BIT, + PHS_W_ERR_BIT, + PHS_MULTI_ERR_BIT, +} PROT_ErrBit; + +/**< Motor error protection level. */ +typedef enum { + PROT_LEVEL_0 = 0, + PROT_LEVEL_1, + PROT_LEVEL_2, + PROT_LEVEL_3, + PROT_LEVEL_4 /**< The greater level number, the severe error is. */ +} PROT_Level; + +/** + * @brief Obtains the status of a bit of data. + * @param data data. + * @param bits Number of digits. + * @retval Bit status. + */ +static inline bool GetBit(int data, unsigned short bit) +{ + bool ret; + ret = ((data >> bit) & 1); + return ret; +} + +/** + * @brief Sets the status of a bit of data. + * @param data data. + * @param bit The setted bit. + * @retval None. + */ +static inline void SetBit(int *data, unsigned char bit) +{ + *data |= (1 << bit); +} + +/** + * @brief Clear the status of a bit of data. + * @param data data. + * @param bit The Clear bit. + * @retval None. + */ +static inline void ClearBit(int *data, unsigned char bit) +{ + *data &= ~(1 << bit); +} + +/**< Protection action. */ +void ProtSpo_Exec(APT_RegStruct **aptAddr); + +#endif diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c new file mode 100644 index 00000000..e97876b7 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c @@ -0,0 +1,137 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.c + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Get motor over current error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overCurrErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor lower dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.lowerVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Ipm temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overIpmTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Motor temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overMotorTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor stalling error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.motorStalling) { + return true; + } else { + return false; + } +} + +/** + * @brief Clear the motor error status. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + /* Clear the motor error status. */ + motorProt->motorErrStatus.all = 0x00; + OCP_Clear(&motorProt->ocp); + OVP_Clear(&motorProt->ovp); + LVP_Clear(&motorProt->lvp); + OTP_Clear(&motorProt->otp); +} + +/** + * @brief Motor protection function initialization. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void MotorProt_Init(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + motorProt->motorErrStatus.all = 0x00; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h new file mode 100644 index 00000000..365110e1 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h @@ -0,0 +1,54 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.h + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_H +#define McuMagicTag_MCS_PROT_USER_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_curr_prot.h" +#include "mcs_dc_volt_prot.h" +#include "mcs_temp_prot.h" +#include "mcs_motor_stalling.h" +#include "typedefs.h" + +typedef struct { + MotorErrStatusReg motorErrStatus; /**< Motor error status. */ + OCP_Handle ocp; /**< Over current protection. */ + OVP_Handle ovp; /**< Over dc-link voltage protection. */ + LVP_Handle lvp; /**< Lower dc-link voltage protection. */ + OTP_Handle otp; /**< Over IPM temperature protection. */ + STP_Handle stall; /**< Motor stalling protection. */ +} MotorProtStatus_Handle; + +void MotorProt_Init(MotorProtStatus_Handle *motorProt); + +/**< Inquiry motor error status */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus); +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus); +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h new file mode 100644 index 00000000..832cd1be --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h @@ -0,0 +1,125 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user_config.h + * @author MCU Algorithm Team + * @brief This file contans user macro definition of the protection function. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_CONFIG_H +#define McuMagicTag_MCS_PROT_USER_CONFIG_H + +/* Macro definitions --------------------------------------------------------------------------- */ +/**< COMMON */ +/**< Peak phase current (A) of the motor or IPM under continuous operations. */ +#define PROT_MOTOR_RATED_CURR (1.0f) +/**< Only several continuous fault detection can trigger error status. */ +#define PROT_CNT_LIMIT (100) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define RECY_CNT_LIMIT (10000) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define OVER_VOLT_RECY_CNT_LIMIT (100) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define LOWER_VOLT_RECY_CNT_LIMIT (100) + +/**< Over current protection */ +/**< Over current trigger value (A) when in level 1. */ +#define PROT_OVER_CURR_POW_DN1 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 2. */ +#define PROT_OVER_CURR_POW_DN2 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 3. */ +#define PROT_OVER_CURR_POW_DN3 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 4. */ +#define PROT_OVER_CURR_POW_OFF (2.0f * PROT_MOTOR_RATED_CURR) +#define PROT_OVER_CURR_RECY_DELTA (0.0035f) /**< Current gap (A) when recovers from protection status. */ +#define PROT_OVER_CURR_LIMIT1_TIME_SEC (30.0f) /**< 20% overload can last maximum time: 30 sec. */ +#define PROT_OVER_CURR_LIMIT2_TIME_SEC (10.0f) /**< 20% overload can last maximum time: 10 sec. */ +#define PROT_OVER_CURR_LIMIT3_TIME_SEC (2.0f) /**< 20% overload can last maximum time: 2 sec. */ + +/**< Over voltage protection */ +#define PROT_OVER_VOLT_BRK_ON1 (26.0f) /**<处于1级时,直流链路电压触发值(V)过高*/ +#define PROT_OVER_VOLT_BRK_ON2 (27.0f) /**< Over dc-link voltage trigger value (V) when in level 2. */ +#define PROT_OVER_VOLT_BRK_ON3 (28.0f) /**< Over dc-link voltage trigger value (V) when in level 3. */ +#define PROT_OVER_VOLT_BRK_ALL (30.0f) /**< Over dc-link voltage trigger value (V) when in level 4. */ +#define PROT_OVER_VOLT_RECY_DELTA (0.5f) /**<从保护状态恢复时的电压间隙(V)*/ +#define PROT_OVER_VOLT_LIMIT1_TIME_SEC (5.0f) /** 1; One-cycle mode: < 0.5 */ +#define POS_SNSR_IPD_INJ_PERIOD (4) + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c new file mode 100644 index 00000000..da4e56f8 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c @@ -0,0 +1,267 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.c + * @author MCU Algorithm Team + * @brief This file contains current protecion api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_curr_prot.h" +#include "mcs_math.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over current protection function. + * @param ocp Over current protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OCP_Init(OCP_Handle *ocp, float ts) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ocp->ts = ts; + OCP_Clear(ocp); + + ocp->protCntLimit = PROT_CNT_LIMIT; + ocp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring four levels of current protection thresholds. */ + ocp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_CURR_POW_DN1; + ocp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_CURR_POW_DN2; + ocp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_CURR_POW_DN3; + ocp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_CURR_POW_OFF; + /* Configure the protection limit time. */ + ocp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_CURR_LIMIT1_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_CURR_LIMIT2_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_CURR_LIMIT3_TIME_SEC; + ocp->recyDelta = PROT_OVER_CURR_RECY_DELTA; +} + +/** + * @brief Over current protection detection. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + /* Calculate current amplitude. */ + ocp->currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + + /* Check if value goes over threshold for continuous cycles. */ + if (ocp->currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0]) { + ocp->protCnt = 0; + return; + } + + if (ocp->protCnt < ocp->protCntLimit) { + ocp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_3] && ocp->protLevel < PROT_LEVEL_4) { + ocp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_2] && ocp->protLevel < PROT_LEVEL_3) { + ocp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_1] && ocp->protLevel < PROT_LEVEL_2) { + ocp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_0] && ocp->protLevel < PROT_LEVEL_1) { + ocp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } +} + +/** + * @brief Over current protection execution. + * @param ocp Over current protection handle. + * @param idqRef DQ-axis current references. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(idqRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + + float id = idqRef->d; + float iq = idqRef->q; + float idqAmp = ocp->currAmp; + /* According to protect level, take corresponding action. */ + switch (ocp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + idqRef->d = 0.0f; + idqRef->q = 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_2]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_1]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_0]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } +} + +/** + * @brief Over current protection recovery. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @retval None. + */ +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overCurrErr) { + return; + } + + /* Calculate current amplitude. */ + float currAmp = ocp->currAmp; + + /* According to protection level, take corresponding recovery action. */ + switch (ocp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_3] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_3; + ocp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_2] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_2; + ocp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_1] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_1; + ocp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + } + } + break; + + /* level 0 */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overCurrErr = 0; + break; + + default: + break; + } +} + +/** + * @brief Over current protection error status clear. + * @param ocp Over current protection handle. + * @retval None. + */ +void OCP_Clear(OCP_Handle *ocp) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* Clear the history value. */ + ocp->protCnt = 0; + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + ocp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h new file mode 100644 index 00000000..e9916fe4 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h @@ -0,0 +1,52 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.h + * @author MCU Algorithm Team + * @brief This file contains current protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_CURR_PROT_H +#define McuMagicTag_MCS_CURR_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_typedef.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float currAmp; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OCP_Handle; + +void OCP_Init(OCP_Handle *ocp, float ts); +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq); +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr); +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus); +void OCP_Clear(OCP_Handle *ocp); + +#endif diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c new file mode 100644 index 00000000..b0541a2e --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c @@ -0,0 +1,495 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.c + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection api declaration. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_dc_volt_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over dc-link voltage protection function. + * @param ovp Over dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OVP_Init(OVP_Handle *ovp, float ts) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ovp->ts = ts; + OVP_Clear(ovp); + ovp->protCntLimit = PROT_CNT_LIMIT; + ovp->recyCntLimit = OVER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of overvoltage protection thresholds. */ + ovp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_VOLT_BRK_ON1; + ovp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_VOLT_BRK_ON2; + ovp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_VOLT_BRK_ON3; + ovp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_VOLT_BRK_ALL; + /* Configure the protection limit time. */ + ovp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_VOLT_LIMIT1_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_VOLT_LIMIT2_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_VOLT_LIMIT3_TIME_SEC; + ovp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Initilization lower dc-link voltage protection function. + * @param lvp Lower dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void LVP_Init(LVP_Handle *lvp, float ts) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + + lvp->ts = ts; + LVP_Clear(lvp); + + lvp->protCntLimit = PROT_CNT_LIMIT; + lvp->recyCntLimit = LOWER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of lower voltage protection thresholds. */ + lvp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_LOWER_VOLT_POW_DN1; + lvp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_LOWER_VOLT_POW_DN2; + lvp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_LOWER_VOLT_POW_DN3; + lvp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_LOWER_VOLT_POW_OFF; + /* Configure the protection limit time. */ + lvp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_LOWER_VOLT_LIMIT1_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_LOWER_VOLT_LIMIT2_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_LOWER_VOLT_LIMIT3_TIME_SEC; + lvp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Over dc-link voltage protection detection. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0]) { + ovp->protCnt = 0; + return; + } + + if (ovp->protCnt < ovp->protCntLimit) { + ovp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_3] && ovp->protLevel < PROT_LEVEL_4) { + ovp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_2] && ovp->protLevel < PROT_LEVEL_3) { + ovp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_1] && ovp->protLevel < PROT_LEVEL_2) { + ovp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_0] && ovp->protLevel < PROT_LEVEL_1) { + ovp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } +} + +/** + * @brief Lower dc-link voltage protection detection. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0]) { + lvp->protCnt = 0; + return; + } + + if (lvp->protCnt < lvp->protCntLimit) { + lvp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_3] && lvp->protLevel < PROT_LEVEL_4) { + lvp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_2] && lvp->protLevel < PROT_LEVEL_3) { + lvp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_1] && lvp->protLevel < PROT_LEVEL_2) { + lvp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_0] && lvp->protLevel < PROT_LEVEL_1) { + lvp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } +} + +/** + * @brief Over dc-link voltage protection execution. + * @param ovp Over dc-link voltage protection handle. + * @param duty Brake loop output duty (0-1). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(duty != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (ovp->protLevel) { + /* level 4: brake loop duty maximum. */ + case PROT_LEVEL_4: + *duty = PROT_OVER_VOLT_BRK_DUTY4; + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + break; + + /* level 3: brake loop duty level 3. */ + case PROT_LEVEL_3: + *duty = PROT_OVER_VOLT_BRK_DUTY2; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_2]) { + *duty = PROT_OVER_VOLT_BRK_DUTY3; + } + break; + + /* level 2: brake loop duty level 2. */ + case PROT_LEVEL_2: + *duty = PROT_OVER_VOLT_BRK_DUTY1; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_1]) { + *duty = PROT_OVER_VOLT_BRK_DUTY2; + } + break; + + /* level 1: brake loop duty level 1. */ + case PROT_LEVEL_1: + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_0]) { + *duty = PROT_OVER_VOLT_BRK_DUTY1; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection execution. + * @param lvp Lower dc-link voltage protection handle. + * @param spdRef Speed Reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (lvp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + *spdRef *= PROT_POW_DN1_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_0]) { + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection recovery. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (ovp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_3] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_3; + ovp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is less than threshold 2, level-2 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_2] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_2; + ovp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is less than threshold 1, level-1 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_1] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_1; + ovp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is less than threshold 0, level-0 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection recovery. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.lowerVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (lvp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the dc-link voltage is greater than threshold 3, level-3 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_3] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_3; + lvp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is greater than threshold 2, level-2 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_2] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_2; + lvp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is greater than threshold 1, level-1 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_1] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_1; + lvp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is greater than threshold 0, level-0 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.lowerVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection error status clear. + * @param ovp Over voltage protection handle. + * @retval None. + */ +void OVP_Clear(OVP_Handle *ovp) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* Clear the history value. */ + ovp->protCnt = 0; + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + ovp->timer = 0.0f; +} + +/** + * @brief Lower dc-link voltage protection error status clear. + * @param lvp Lower voltage protection handle. + * @retval None. + */ +void LVP_Clear(LVP_Handle *lvp) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* Clear the history value. */ + lvp->protCnt = 0; + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + lvp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h new file mode 100644 index 00000000..0435156a --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h @@ -0,0 +1,69 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.h + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_DC_VOLT_PROT_H +#define McuMagicTag_MCS_DC_VOLT_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low voltage level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OVP_Handle; + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from high voltage level to low. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} LVP_Handle; + +void OVP_Init(OVP_Handle *ovp, float ts); +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr); +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Clear(OVP_Handle *ovp); + +void LVP_Init(LVP_Handle *lvp, float ts); +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr); +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Clear(LVP_Handle *lvp); + +#endif diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c new file mode 100644 index 00000000..9dee4d2d --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c @@ -0,0 +1,112 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.c + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_motor_stalling.h" +#include "mcs_prot_user_config.h" +#include "mcs_math.h" +#include "mcs_math_const.h" +#include "mcs_assert.h" + +/** + * @brief Initilization motor stalling protection function. + * @param stall Motor stalling handle. + * @param ts Ctrl period (s). + * @param currLimit The current amplitude that triggers fault. (A). + * @param spdLimit The speed amplitude that triggers fault. (Hz). + * @param timeLimit The threshold time that current amplitude over the limit (s). + * @retval None. + */ +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + MCS_ASSERT_PARAM(currLimit > 0.0f); + MCS_ASSERT_PARAM(spdLimit > 0.0f); + MCS_ASSERT_PARAM(timeLimit > 0.0f); + /* Configuring parameters for stalling detection. */ + stall->ts = ts; + /* Current threshold and speed threshold for stalling fault. */ + stall->currAmpLimit = currLimit; + stall->spdLimit = spdLimit; + stall->timeLimit = timeLimit; + stall->timer = 0.0f; +} + +/** + * @brief Motor stalling detection. + * @param stall Motor stalling handle. + * @param motorErrStatus Motor error status. + * @param spd Speed feedback (Hz). + * @param idq Dq-axis current feedback (A). + * @retval None. + */ +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(Abs(spd) >= 0.0f); + /* Calculate current amplitude. */ + float currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + float spdAbs = Abs(spd); + /* Check if value goes over threshold for continuous cycles. */ + if (currAmp < stall->currAmpLimit || spdAbs > stall->spdLimit) { + stall->timer = 0.0f; + return; + } + /* Time accumulation. */ + if (stall->timer < stall->timeLimit) { + stall->timer += stall->ts; + return; + } + motorErrStatus->Bit.motorStalling = 1; +} + +/** + * @brief Motor stalling protection execution. + * @param motorErrStatus Motor error status. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + if (motorErrStatus->Bit.motorStalling == 0) { + return; + } + + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + return; +} + +/** + * @brief Motor stalling protection error status clear. + * @param stall Motor stalling handle. + * @retval None. + */ +void STP_Clear(STP_Handle *stall) +{ + MCS_ASSERT_PARAM(stall != NULL); + stall->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h new file mode 100644 index 00000000..a1d1e4be --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h @@ -0,0 +1,45 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.h + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_MOTOR_STALLING_PROT_H +#define McuMagicTag_MCS_MOTOR_STALLING_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" +#include "mcs_typedef.h" + +typedef struct { + float currAmpLimit; /**< Feedback current higher than this value triggers fault. (A). */ + float spdLimit; /**< Feedback speed lower than this value triggers fault (Hz). */ + float timeLimit; /**< The threshold time that current and speed feedback over ranges (s). */ + float timer; /**< Timer to get speed and current over range time. */ + float ts; /**< Ctrl period (s). */ +} STP_Handle; + +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit); +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq); +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr); +void STP_Clear(STP_Handle *stall); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c new file mode 100644 index 00000000..184ba4a3 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c @@ -0,0 +1,262 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.c + * @author MCU Algorithm Team + * @brief This file contains over temperature protection api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_temp_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over temperation protection function. + * @param otp Over temperature protection handle. + * @param ts Ctrl period. + * @retval None. + */ +void OTP_Init(OTP_Handle *otp, float ts) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + otp->ts = ts; + otp->protCntLimit = PROT_CNT_LIMIT; + otp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring the temperature protection threshold. */ + otp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_IPM_TEMP_POW_DN1; + otp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_IPM_TEMP_POW_DN2; + otp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_IPM_TEMP_POW_DN3; + otp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_IPM_TEMP_POW_OFF; + /* Configuring the protection limiting time. */ + otp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_TEMP_LIMIT1_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_TEMP_LIMIT2_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_TEMP_LIMIT3_TIME_SEC; + otp->recyDelta = PROT_OVER_IPM_TEMP_RECY_DELTA; + OTP_Clear(otp); +} + +/** + * @brief Over temperatre protection detection. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0]) { + otp->protCnt = 0; + ClearBit(&motorErrStatus->all, protBit); + return; + } + + if (otp->protCnt < otp->protCntLimit) { + otp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_3] && otp->protLevel < PROT_LEVEL_4) { + otp->protLevel = PROT_LEVEL_4; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_2] && otp->protLevel < PROT_LEVEL_3) { + otp->protLevel = PROT_LEVEL_3; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_1] && otp->protLevel < PROT_LEVEL_2) { + otp->protLevel = PROT_LEVEL_2; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_0] && otp->protLevel < PROT_LEVEL_1) { + otp->protLevel = PROT_LEVEL_1; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } +} + +/** + * @brief Over temperature protection execution. + * @param otp Over temperature protection handle. + * @param spdRef Speed reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (otp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + /* Reducte motor speed to level 2 */ + *spdRef *= PROT_POW_DN1_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + case PROT_LEVEL_1: + /* Reducte motor speed to level 0 */ + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_0]) { + /* level 1: derate speed reference. */ + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection recovery. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param temp Temperature (celsius). + * @retval None. + */ +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* If not under error state, just return without any operation. */ + if (otp->protLevel == PROT_LEVEL_0) { + motorErrStatus->all &= (~(1 >> protBit)); + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (otp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the temperature is less than threshold 3, level-3 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_3] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_3; + otp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the temperature is less than threshold 2, level-2 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_2] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_2; + otp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the temperature is less than threshold 1, level-1 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_1] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_1; + otp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the temperature is less than threshold 0, level-0 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + } + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection error status clear. + * @param otp Over temperature protection handle. + * @retval None. + */ +void OTP_Clear(OTP_Handle *otp) +{ + MCS_ASSERT_PARAM(otp != NULL); + /* Clear the history value. */ + otp->protCnt = 0; + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + otp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h new file mode 100644 index 00000000..2b9d99a7 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h @@ -0,0 +1,49 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.h + * @author MCU Algorithm Team + * @brief his file contains over temperature protection api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_TEMP_PROT_H +#define McuMagicTag_MCS_TEMP_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float ts; + float timer; + PROT_Level protLevel; +} OTP_Handle; + +void OTP_Init(OTP_Handle *otp, float ts); +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr); +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Clear(OTP_Handle *otp); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/readme.md b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/readme.md new file mode 100644 index 00000000..98b2a068 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/readme.md @@ -0,0 +1,10 @@ +# pmsm_sensorless_2shunt_foc + +**【功能描述】** ++ 基于ECMCU105H/ECBMCU201MPC单板的单电机双电阻采样Foc应用 + +**【环境要求】** ++ 所有单板电源改制为演示用的12V低压,电机选用Gimbal GBM2804H-100T + +**【IDE配置方法】** ++ chipConfig中的Sample栏目里面选中pmsm sensorless 2shunt foc示例,然后点击生成代码即可 diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c new file mode 100644 index 00000000..9fc8afac --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c @@ -0,0 +1,144 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.c + * @author MCU Algorithm Team + * @brief This file provides carrier interrupt application for motor control. + */ + +#include "mcs_carrier.h" +#include "mcs_math.h" +#include "typedefs.h" +#include "mcs_assert.h" +#include "mcs_user_config.h" +#include "mcs_ctlmode_config.h" + +/** + * @brief Synchronous rotation coordinate system angle. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_SyncCoorAngle(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* Synchronous rotation coordinate system angle. */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + /* Current ramp angle is 0. */ + if (mtrCtrl->startup.stage == STARTUP_STAGE_CURR) { + mtrCtrl->axisAngle = 0; + } else if (mtrCtrl->startup.stage == STARTUP_STAGE_SPD) { /* IF control phase angle self-addition. */ + mtrCtrl->axisAngle = IF_CurrAngleCalc(&mtrCtrl->ifCtrl, mtrCtrl->spdRefHz); + } else if (mtrCtrl->startup.stage == STARTUP_STAGE_SWITCH) { /* Switch Angle */ + mtrCtrl->axisAngle = mtrCtrl->smo.elecAngle; + } + break; + + case FSM_RUN: + mtrCtrl->axisAngle = mtrCtrl->smo.elecAngle; + break; + + default: + mtrCtrl->axisAngle = 0; + break; + } +} + +/** + * @brief PWM waveform setting and sampling point setting for a single resistors and dual resistors. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_PwmAdcSet(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SampleMode sampleMode = mtrCtrl->sampleMode; + /* Set the duty cycle according to the sampling mode. */ + if (sampleMode == DUAL_RESISTORS) { + SVPWM_Exec(&mtrCtrl->sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvw); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvw, &mtrCtrl->dutyUvw); + } else if (sampleMode == SINGLE_RESISTOR) { + R1SVPWM_Exec(&mtrCtrl->r1Sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + /* The ADC sampling point position needs to be set based on the phase shift of a single resistors. */ + mtrCtrl->setADCTriggerTimeCb(mtrCtrl->r1Sv.samplePoint[0] * mtrCtrl->aptMaxcntCmp, \ + mtrCtrl->r1Sv.samplePoint[1] * mtrCtrl->aptMaxcntCmp); + } +} + +/** + * @brief Carrier interrupt function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UvwAxis *currUvw = &mtrCtrl->currUvw; + AlbeAxis *currAlbe = &mtrCtrl->iabFbk; + AlbeAxis *vab = &mtrCtrl->vabRef; + SampleMode sampleMode = mtrCtrl->sampleMode; + /* sample mode verify */ + if (sampleMode > SINGLE_RESISTOR || mtrCtrl->setADCTriggerTimeCb == NULL) { + return; + } + /* param verify */ + if (mtrCtrl->setPwmDutyCb == NULL || mtrCtrl->readCurrUvwCb == NULL) { + return; + } + /* Read the three-phase current value. */ + mtrCtrl->readCurrUvwCb(currUvw); + /* Clark Calc */ + ClarkeCalc(currUvw, currAlbe); + /* Smo observation */ + if (mtrCtrl->obserType == FOC_OBSERVERTYPE_SMO1TH) { + /* Smo observation */ + FOSMO_Exec(&mtrCtrl->smo, currAlbe, vab, mtrCtrl->spdRefHz); + } else if (mtrCtrl->obserType == FOC_OBSERVERTYPE_SMO4TH) { + /* Smo4th observation */ + SMO4TH_Exec(&mtrCtrl->smo4th, currAlbe, vab); + mtrCtrl->smo.spdEst = mtrCtrl->smo4th.spdEst; + mtrCtrl->smo.elecAngle = mtrCtrl->smo4th.elecAngle; + } + /* Synchronization angle */ + MCS_SyncCoorAngle(mtrCtrl); + + /* Park transformation */ + ParkCalc(currAlbe, mtrCtrl->axisAngle, &mtrCtrl->idqFbk); + + /* statemachine */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + case FSM_RUN: + CURRCTRL_Exec(&mtrCtrl->currCtrl, &mtrCtrl->vdqRef, mtrCtrl->smo.spdEst, 0); + InvParkCalc(&mtrCtrl->vdqRef, mtrCtrl->axisAngle, vab); + MCS_PwmAdcSet(mtrCtrl); + break; + + case FSM_CAP_CHARGE: + case FSM_CLEAR: + case FSM_IDLE: + mtrCtrl->smo4th.spdEst = 0.0f; + break; + + default: + vab->alpha = 0.0f; + vab->beta = 0.0f; + MCS_PwmAdcSet(mtrCtrl); + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c new file mode 100644 index 00000000..79bc3949 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c @@ -0,0 +1,950 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.c + * @author MCU Algorithm Team + * @brief This file provides motor application. + * @details Single FOC application based on the ECMCU105H/ECBMCU201MPC board + * 1) Motor model is Gimbal GBM2804H-100T. + * 2) Select the pmsm sensorless 2shunt foc example in the sample column + of chipConfig and click Generate Code. + * 3) It's power supply must be changed to 12V. + */ +#include "main.h" +#include "mcs_user_config.h" +#include "mcs_math.h" +#include "hmi_module.h" +#include "mcs_ctlmode_config.h" +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_math_const.h" +#include "mcs_motor_process.h" +#include "mcs_chip_config.h" +#include + +/*------------------------------- Macro Definition -----------------------------------------------*/ +#define US_PER_MS 1000 +#define ANGLE_RANGE_ABS 65536 +#define ANGLE_360_F 65536.0f /* 0 - 65536 indicates 0 to 360. */ +#define APT_FULL_DUTY 1.0f +#define TEMP_3 3.0f +#define TEMP_15 15.0f +#define TEMP_30 30.0f +#define TEMP_45 45.0f +#define TEMP_60 60.0f +#define TEMP_RES_15 78.327f +#define TEMP_RES_30 36.776f +#define TEMP_RES_45 18.301f +#define TEMP_RES_60 9.607f +#define CNT_10 10 +#define CNT_5000 5000 +#define LEVEL_4 4 +#define MOTOR_START_DELAY 2 +#define ADC_READINIT_DELAY 1 +#define ADC_READINIT_TIMES 20 +#define ADC_TRIMVALUE_MIN 1800.0f +#define ADC_TRIMVALUE_MAX 2200.0f +/*------------------------------- Param Definition -----------------------------------------------*/ +/* Motor parameters. */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift */ +static MOTOR_Param g_motorParam = MOTORPARAM_DEFAULTS; +static APT_RegStruct* g_apt[PHASE_MAX_NUM] = {APT_U, APT_V, APT_W}; +/* Motor control handle */ +static MTRCTRL_Handle g_mc = {0}; + +/* Motor speed loop PI param. */ +static void SPDCTRL_InitWrapper(SPDCTRL_Handle *spdHandle, float ts) +{ + /* Speed loop param assignment. */ + PI_Param spdPi = { + .kp = SPD_KP, + .ki = SPD_KI, + .lowerLim = SPD_LOWERLIM, + .upperLim = SPD_UPPERLIM, + }; + /* Speed loop param init. */ + SPDCTRL_Init(spdHandle, &g_motorParam, spdPi, ts); +} + +/* Motor current Loop PI param. */ +static void CURRCTRL_InitWrapper(CURRCTRL_Handle *currHandle, DqAxis *idqRef, DqAxis *idqFbk, float ts) +{ + /* Axis-D current loop param assignment. */ + PI_Param dCurrPi = { + .kp = CURRDAXIS_KP, + .ki = CURRDAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Axis-Q current loop param assignment. */ + PI_Param qCurrPi = { + .kp = CURRQAXIS_KP, + .ki = CURRQAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Current loop param init. */ + CURRCTRL_Init(currHandle, &g_motorParam, idqRef, idqFbk, dCurrPi, qCurrPi, ts); +} + +/* First order smo param. */ +static void FOSMO_InitWrapper(FOSMO_Handle *fosmo, float ts) +{ + /* Smo param assignment. */ + FOSMO_Param fosmoParam = { + .gain = FOSMO_GAIN, + .lambda = FOSMO_LAMBDA, + .fcEmf = FOSMO_EMF_CUTOFF_FREQ, + .fcLpf = SPEED_FILTER_CUTOFF_FREQUENCY, + .pllBdw = FOSMO_PLL_BDW, + }; + /* Init smo param. */ + FOSMO_Init(fosmo, fosmoParam, &g_motorParam, ts); +} + +/* Smo4th param. */ +static void SMO4TH_InitWrapper(SMO4TH_Handle *smo4TH) +{ + /* Smo4th param assignment. */ + SMO4TH_Param smo4thParam = { + .kd = SMO4TH_KD, + .kq = SMO4TH_KQ, + .pllBdw = SMO4TH_PLL_BDW, + .fcLpf = SMO4TH_SPD_FILTER_CUTOFF_FREQ, + }; + /* Init smo param. */ + SMO4TH_Init(smo4TH, smo4thParam, &g_motorParam, CTRL_CURR_PERIOD); +} + +/*------------------------------- Function Definition -----------------------------------------------*/ +/** + * @brief Initialzer of system tick. + * @param mtrCtrl Motor control struct handle. + * @retval None. + */ +static void TimerTickInit(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysTickCnt = 0; + mtrCtrl->msTickNum = US_PER_MS / SYSTICK_PERIOD_US; + mtrCtrl->capChargeTickNum = (INV_CAP_CHARGE_MS * US_PER_MS / SYSTICK_PERIOD_US); +} + +/** + * @brief Init motor control task. + * @retval None. + */ +static void TSK_Init(void) +{ + g_mc.motorStateFlag = 0; + g_mc.uartHeartDetCnt = 0; + g_mc.uartTimeStamp = 0; + g_mc.stateMachine = FSM_IDLE; + g_mc.currCtrlPeriod = CTRL_CURR_PERIOD; /* Init current controller */ + g_mc.aptMaxcntCmp = g_apt0.waveform.timerPeriod; + g_mc.sampleMode = DUAL_RESISTORS; + g_mc.obserType = FOC_OBSERVERTYPE_SMO4TH; /* Init foc observe mode */ + g_mc.controlMode = FOC_CONTROLMODE_SPEED; /* Init motor control mode */ + g_mc.adcCurrCofe = ADC_CURR_COFFI; + g_mc.spdAdjustMode = CUST_SPEED_ADJUST; + g_mc.uartConnectFlag = DISCONNECT; + g_mc.spdCmdHz = USER_MIN_SPD_HZ; /* Motor initialization speed */ + + g_mc.adc0Compensate = ADC0COMPENSATE; /* Phase-u current init adc shift trim value */ + g_mc.adc1Compensate = ADC1COMPENSATE; /* Phase-w current init adc shift trim value */ + + IF_Init(&g_mc.ifCtrl, CTRL_IF_CURR_AMP_A, USER_CURR_SLOPE, CTRL_SYSTICK_PERIOD, CTRL_CURR_PERIOD); + RMG_Init(&g_mc.spdRmg, CTRL_SYSTICK_PERIOD, USER_SPD_SLOPE); /* Init speed slope */ + MtrParamInit(&g_mc.mtrParam, g_motorParam); + + TimerTickInit(&g_mc); + if (g_mc.sampleMode == DUAL_RESISTORS) { + SVPWM_Init(&g_mc.sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3); /* Dual resistors SVPWM init. */ + } else if (g_mc.sampleMode == SINGLE_RESISTOR) { + /* Single resistor SVPWM init. */ + R1SVPWM_Init(&g_mc.r1Sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3, SAMPLE_POINT_SHIFT, SAMPLE_WINDOW_DUTY); + } + + SPDCTRL_InitWrapper(&g_mc.spdCtrl, CTRL_SYSTICK_PERIOD); + CURRCTRL_InitWrapper(&g_mc.currCtrl, &g_mc.idqRef, &g_mc.idqFbk, CTRL_CURR_PERIOD); + FOSMO_InitWrapper(&g_mc.smo, CTRL_CURR_PERIOD); + SMO4TH_InitWrapper(&g_mc.smo4th); + + STARTUP_Init(&g_mc.startup, USER_SWITCH_SPDBEGIN_HZ, USER_SWITCH_SPDBEGIN_HZ + TEMP_3); + + MotorProt_Init(&g_mc.prot); /* Init protect state comond */ + OCP_Init(&g_mc.prot.ocp, CTRL_CURR_PERIOD); + OVP_Init(&g_mc.prot.ovp, CTRL_SYSTICK_PERIOD); + LVP_Init(&g_mc.prot.lvp, CTRL_SYSTICK_PERIOD); + OTP_Init(&g_mc.prot.otp, CTRL_SYSTICK_PERIOD); + STP_Init(&g_mc.prot.stall, CTRL_SYSTICK_PERIOD, PROT_STALLING_CURR_AMP_LIMIT, + PROT_STALLING_SPD_LIMIT, PROT_STALLING_TIME_LIMIT); +} + +/** + * @brief Clear historical values of all controller before start-up. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ClearBeforeStartup(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* The initial angle is 0. */ + mtrCtrl->axisAngle = 0; + + mtrCtrl->spdRefHz = 0.0f; + /* The initial dq-axis reference current is 0. */ + mtrCtrl->idqRef.d = 0.0f; + mtrCtrl->idqRef.q = 0.0f; + + mtrCtrl->vdqRef.d = 0.0f; + mtrCtrl->vdqRef.q = 0.0f; + /* Clear Duty Cycle Value. The initial duty cycle is 0.5. */ + mtrCtrl->dutyUvwLeft.u = 0.5f; + mtrCtrl->dutyUvwLeft.v = 0.5f; + mtrCtrl->dutyUvwLeft.w = 0.5f; + mtrCtrl->dutyUvwRight.u = 0.5f; + mtrCtrl->dutyUvwRight.v = 0.5f; + mtrCtrl->dutyUvwRight.w = 0.5f; + + mtrCtrl->prot.motorErrStatus.all = 0x00; + + RMG_Clear(&mtrCtrl->spdRmg); /* Clear the history value of speed slope control */ + CURRCTRL_Clear(&mtrCtrl->currCtrl); + IF_Clear(&mtrCtrl->ifCtrl); + SPDCTRL_Clear(&mtrCtrl->spdCtrl); + FOSMO_Clear(&mtrCtrl->smo); + SMO4TH_Clear(&mtrCtrl->smo4th); + STARTUP_Clear(&mtrCtrl->startup); + R1SVPWM_Clear(&mtrCtrl->r1Sv); + + OTP_Clear(&mtrCtrl->prot.otp); + OCP_Clear(&mtrCtrl->prot.ocp); + OVP_Clear(&mtrCtrl->prot.ovp); + LVP_Clear(&mtrCtrl->prot.lvp); +} + +/** + * @brief To set the comparison value of the IGBT single-resistance ADC sampling trigger position. + * @param aptx The APT register struct handle. + * @param cntCmpA A Count compare reference of time-base counter. + * @param cntCmpB B Count compare reference of time-base counter. + * @param maxCntCmp Maximum Comparison Value + * @retval None. + */ +static void MCS_SetAdcCompareR1(APT_RegStruct *aptx, unsigned short cntCmpA, + unsigned short cntCmpB, unsigned short maxCntCmp) +{ + unsigned short tmp; + /* Sets the A Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpA), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_A, tmp); + /* Sets the B Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpB), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_B, tmp); +} + +/** + * @brief Open the three-phase lower pipe. + * @param aptAddr Three-phase APT address pointer. + * @param maxDutyCnt Max duty count. + * @retval None. + */ +static void AptTurnOnLowSidePwm(APT_RegStruct **aptAddr, unsigned short maxDutyCnt) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(maxDutyCnt != 0); + unsigned short dutyCnt; + dutyCnt = (unsigned short)(maxDutyCnt * APT_FULL_DUTY); + /* Open the three-phase lower pipe */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_C, dutyCnt); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_D, dutyCnt); + } +} + +/** + * @brief Enable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputEnable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Enable three-phase pwm output */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_UNSET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_UNSET; + } +} + +/** + * @brief Disable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputDisable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Disable three-phase pwm output. */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_SET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_SET; + DCL_APT_ForcePWMOutputLow(aptx); + } +} + +/** + * @brief Smo IF angle difference calculation. + * @param smoElecAngle Smo electrical angle. + * @param ifCtrlAngle IF control angle. + * @retval signed short angle difference. + */ +static float SmoIfAngleDiffCalc(float smoElecAngle, float ifCtrlAngle) +{ + float diff = AngleSub(smoElecAngle, ifCtrlAngle); + /* Smo IF angle difference calculation */ + return diff; +} + +/** + * @brief Construct a new mcs startupswitch object. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_StartupSwitch(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + STARTUP_Handle *startup = &mtrCtrl->startup; + DqAxis *idqRef = &mtrCtrl->idqRef; + float iftargetAmp = mtrCtrl->ifCtrl.targetAmp; + float spdRefHz = mtrCtrl->spdRefHz; + + switch (startup->stage) { + case STARTUP_STAGE_CURR: + if (mtrCtrl->ifCtrl.curAmp >= iftargetAmp) { + /* Stage change */ + idqRef->q = iftargetAmp; + startup->stage = STARTUP_STAGE_SPD; + } else { + /* current amplitude increase */ + idqRef->q = IF_CurrAmpCalc(&mtrCtrl->ifCtrl); + spdRefHz = 0.0f; + } + break; + case STARTUP_STAGE_SPD: + /* current frequency increase */ + if (Abs(spdRefHz) >= startup->spdBegin) { + /* Stage change */ + startup->stage = STARTUP_STAGE_SWITCH; + TrigVal localTrigVal; + TrigCalc(&localTrigVal, SmoIfAngleDiffCalc(mtrCtrl->smo.elecAngle, mtrCtrl->ifCtrl.angle)); + idqRef->d = 0.0f; + mtrCtrl->spdCtrl.spdPi.integral = iftargetAmp * localTrigVal.cos; + } else { + /* Speed rmg */ + spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + } + break; + + case STARTUP_STAGE_SWITCH: + /* Switch from IF to SMO */ + spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + idqRef->q = SPDCTRL_Exec(&mtrCtrl->spdCtrl, mtrCtrl->spdRefHz, mtrCtrl->smo.spdEst); + /* Transitional stage, if current reference speed > critical speed, change to next stage */ + if (spdRefHz >= startup->spdBegin + TEMP_3) { + /* Stage change */ + mtrCtrl->stateMachine = FSM_RUN; + } + break; + + default: + break; + } + mtrCtrl->spdRefHz = spdRefHz; +} + +/** + * @brief Pre-processing of motor status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void MotorStatePerProc(SysStatusReg *statusReg, volatile FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* Get system status */ + if (SysIsError(statusReg)) { + *stateMachine = FSM_FAULT; + } + if (SysGetCmdStop(statusReg)) { + SysCmdStopClr(statusReg); + *stateMachine = FSM_STOP; + } +} + +/** + * @brief Check over current status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckOverCurrentState(SysStatusReg *statusReg, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check systerm error status */ + if (SysIsError(statusReg) == false) { + *stateMachine = FSM_IDLE; + } +} + +/** + * @brief Check bootstrap capacitor charge time. + * @param mtrCtrl The motor control handle. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckBootstrpCapChargeTime(MTRCTRL_Handle *mtrCtrl, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + mtrCtrl->sysTickCnt++; + /* check bootstrap capacitor charge time */ + if (mtrCtrl->sysTickCnt == mtrCtrl->capChargeTickNum) { + *stateMachine = FSM_CLEAR; + } +} + +/** + * @brief Check systerm cmd start signal. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckSysCmdStart(MTRCTRL_Handle *mtrCtrl, + APT_RegStruct **aptAddr, + SysStatusReg *statusReg, + FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check start cmd */ + if (SysGetCmdStart(statusReg)) { + SysRunningSet(statusReg); + SysCmdStartClr(statusReg); + mtrCtrl->sysTickCnt = 0; + *stateMachine = FSM_CAP_CHARGE; + /* Preparation for charging the bootstrap capacitor. */ + AptTurnOnLowSidePwm(aptAddr, mtrCtrl->aptMaxcntCmp); + /* Out put pwm */ + MotorPwmOutputEnable(aptAddr); + } +} + +/** + * @brief System timer tick task. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void TSK_SystickIsr(MTRCTRL_Handle *mtrCtrl, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + SysStatusReg *statusReg = &mtrCtrl->statusReg; + FsmState *stateMachine = &mtrCtrl->stateMachine; + mtrCtrl->msTickCnt++; + /* Pre-processing of motor status. */ + MotorStatePerProc(statusReg, stateMachine); + /* statemachine */ + switch (*stateMachine) { + case FSM_IDLE: + /* Set smo estimate speed before motor start-up */ + g_mc.smo.spdEst = 0.0f; + CheckSysCmdStart(mtrCtrl, aptAddr, statusReg, stateMachine); + break; + case FSM_CAP_CHARGE: + /* Bootstrap Capacitor Charging Timing */ + CheckBootstrpCapChargeTime(mtrCtrl, stateMachine); + break; + /* Clear parameter before start */ + case FSM_CLEAR: + ClearBeforeStartup(mtrCtrl); + *stateMachine = FSM_STARTUP; + break; + case FSM_STARTUP: + MCS_StartupSwitch(mtrCtrl); + break; + case FSM_RUN: + /* Speed ramp control */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + /* Speed loop control */ + mtrCtrl->idqRef.q = SPDCTRL_Exec(&mtrCtrl->spdCtrl, mtrCtrl->spdRefHz, mtrCtrl->smo.spdEst); + break; + case FSM_STOP: + mtrCtrl->spdRefHz = 0.0f; + MotorPwmOutputDisable(aptAddr); + SysRunningClr(statusReg); + *stateMachine = FSM_IDLE; + break; + case FSM_FAULT: /* Overcurrent state */ + CheckOverCurrentState(statusReg, stateMachine); + break; + default: + break; + } +} + +/** + * @brief Read the ADC initialize bias trim value. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void TrimInitAdcShiftValue(MTRCTRL_Handle *mtrCtrl) +{ + float adc0SampleTemp = 0.0f; /* Current bias value for temp store */ + float adc1SampleTemp = 0.0f; + float adc0TempSum = 0.0f; + float adc1TempSum = 0.0f; /* Current bias sum value for 20 times */ + float adcSampleTimes = 0.0f; /* ADC sample times */ + for (int i = 0; i < ADC_READINIT_TIMES; i++) { + adc0SampleTemp = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + adc1SampleTemp = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + BASE_FUNC_DELAY_US(200); /* 200 is delay count, delay 200us triger adc sampling */ + if (adc0SampleTemp > 1000.0f && adc1SampleTemp > 1000.0f) { + adcSampleTimes++; + adc0TempSum += adc0SampleTemp; + adc1TempSum += adc1SampleTemp; + } + } + if (adcSampleTimes < 1.0f) { + adcSampleTimes = 1.0f; /* Prevent divide-by-zero errors */ + } + adc0SampleTemp = adc0TempSum / adcSampleTimes; + adc1SampleTemp = adc1TempSum / adcSampleTimes; + /* Force convert to float */ + mtrCtrl->adc0Compensate = (float) adc0SampleTemp; + mtrCtrl->adc1Compensate = (float) adc1SampleTemp; + /* The normal value scope: 1800 < adc0Compensate < 2200 */ + if(g_mc.adc0Compensate < ADC_TRIMVALUE_MIN || g_mc.adc0Compensate > ADC_TRIMVALUE_MAX \ + || g_mc.adc1Compensate < ADC_TRIMVALUE_MIN || g_mc.adc1Compensate > ADC_TRIMVALUE_MAX) { + DBG_PRINTF("ADC trim value error,please reset!"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + } + adcSampleTimes = 0; + adc0TempSum = 0; + adc1TempSum = 0; +} + +/** + * @brief Read the ADC current sampling value. + * @param CurrUvw Three-phase current. + * @retval None. + */ +static void ReadCurrUvw(UvwAxis *CurrUvw) +{ + MCS_ASSERT_PARAM(CurrUvw != NULL); + float adc0 = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + float adc1 = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + /* Convert adc sample value to current value */ + CurrUvw->u = -(adc0 - g_mc.adc0Compensate) * g_mc.adcCurrCofe; + CurrUvw->w = -(adc1 - g_mc.adc1Compensate) * g_mc.adcCurrCofe; + CurrUvw->v = -CurrUvw->u - CurrUvw->w; +} + +/** + * @brief Setting the APT Output Duty Cycle. + * @param aptx APT register base address. + * @param leftDuty Left duty cycle. + * @param rightDuty Right duty cycle. + * @retval None. + */ +static void SetPwmDuty(APT_Handle *aptx, float leftDuty, float rightDuty) +{ + MCS_ASSERT_PARAM(aptx != NULL); + MCS_ASSERT_PARAM(leftDuty > 0); + MCS_ASSERT_PARAM(rightDuty > 0); + unsigned short maxPeriodCnt = aptx->waveform.timerPeriod; + unsigned short cntCmpLeftEdge = (unsigned short)(leftDuty * maxPeriodCnt); + unsigned short cntCmpRightEdge = (unsigned short)(rightDuty * maxPeriodCnt); + /* avoid overflowing */ + cntCmpLeftEdge = (cntCmpLeftEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpLeftEdge; + cntCmpRightEdge = (cntCmpRightEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpRightEdge; + HAL_APT_SetPWMDuty(aptx, cntCmpLeftEdge, cntCmpRightEdge); +} + +/** + * @brief Duty Cycle Setting. + * @param dutyUvwLeft Three-phase left duty cycle. + * @param dutyUvwRight Three-phase right duty cycle. + * @retval None. + */ +static void SetPwmDutyCp(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight) +{ + MCS_ASSERT_PARAM(dutyUvwLeft != NULL); + MCS_ASSERT_PARAM(dutyUvwRight != NULL); + /* Setting the Three-Phase Duty Cycle */ + SetPwmDuty(&g_apt0, dutyUvwLeft->u, dutyUvwRight->u); + SetPwmDuty(&g_apt1, dutyUvwLeft->v, dutyUvwRight->v); + SetPwmDuty(&g_apt2, dutyUvwLeft->w, dutyUvwRight->w); +} + +/** + * @brief To set the ADC sampling trigger comparison value. + * @param cntCmpSOCA Soca Compare Count Value. + * @param cntCmpSOCB Socb Compare Count Value. + * @retval None. + */ +static void SetADCTriggerTime(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB) +{ + MCS_SetAdcCompareR1(g_apt[PHASE_U], cntCmpSOCA, cntCmpSOCB, g_mc.aptMaxcntCmp); +} + +/** + * @brief Temprature table, the temprature detect range is 15 ~ 60 degree. + * @param tempResisValue Temperature sensor resistance. + * @retval None. + */ +static float TempTable(float tempResisValue) +{ + float boardTemp = 0.0f; + /* Temperatures between 15 and 30. */ + if (tempResisValue > TEMP_RES_30 && tempResisValue <= TEMP_RES_15) { + boardTemp = TEMP_15 + (TEMP_30 - TEMP_15) * (TEMP_RES_15 - tempResisValue) / (TEMP_RES_15 - TEMP_RES_30); + } else if (tempResisValue > TEMP_RES_45 && tempResisValue <= TEMP_RES_30) { /* Temperature between 30 and 45. */ + boardTemp = TEMP_30 + (TEMP_45 - TEMP_30) * (TEMP_RES_30 - tempResisValue) / (TEMP_RES_30 - TEMP_RES_45); + } else if (tempResisValue > TEMP_RES_60 && tempResisValue <= TEMP_RES_45) { /* Temperature between 45 and 50. */ + boardTemp = TEMP_45 + (TEMP_60 - TEMP_45) * (TEMP_RES_45 - tempResisValue) / (TEMP_RES_45 - TEMP_RES_60); + } else if (tempResisValue <= TEMP_RES_60) { + boardTemp = TEMP_60; /* If temperature is over 60, set temperature as 60. */ + } else if (tempResisValue >= TEMP_RES_15) { + boardTemp = TEMP_15; /* If temperature is lower 15, set temperature as 15. */ + } + return boardTemp; +} + +/** + * @brief Read power board temperature and udc. + * @retval None. + */ +static void ReadBoardTempAndUdc(void) +{ + HAL_ADC_SoftTrigSample(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + HAL_ADC_SoftTrigSample(&ADCUDC_HANDLE, ADCUDCSOCNUM); + BASE_FUNC_DELAY_US(CNT_10); /* Delay 10 us. */ + /* Force convert to float type. */ + float resisAdcValue = (float)HAL_ADC_GetConvResult(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + /* 10 / (x + 10) * 3.3 = resisAdcValue / 4096 * 3.3, x is resisValue, 10kohm is resistor divider value. */ + float resisValue = (4096.0f * 10.0f - 10.0f * resisAdcValue) / resisAdcValue; + g_mc.powerBoardTemp = TempTable(resisValue); + g_mc.udc = ((float)HAL_ADC_GetConvResult(&ADCUDC_HANDLE, ADCUDCSOCNUM)) * ADC_UDC_COFFI; +} + +/** + * @brief Execut abnormal feedback speed protect motion. + * @retval None. + */ +static void SpdFbkErrorProt_Exec(void) +{ + if (g_mc.prot.motorErrStatus.Bit.motorStalling == 0 && + g_mc.prot.motorErrStatus.Bit.overVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.lowerVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.overIpmTempErr == 0 && + g_mc.prot.motorErrStatus.Bit.overCurrErr == 0) { + g_mc.prot.motorErrStatus.Bit.revRotErr = 1; + /* If revRotErr, execute protect motion. */ + ProtSpo_Exec(g_apt); + } +} + +/** + * @brief Execut nan data protect motion. + * @retval None. + */ +static void NanDataDetect(void) +{ + static short errorSpdStatus = 0; + /* Detect the nan observer speed or current value. */ + if (isnan(g_mc.smo.spdEst) || isnan(g_mc.idqRef.q)) { + errorSpdStatus++; + } else { + errorSpdStatus = 0; + } + /* If the data is nan & continuous counting value is over 500 times, execute protect motion. + the detect time is 500 * 500us = 250ms. */ + if (errorSpdStatus >= 500) { + errorSpdStatus = 0; + SpdFbkErrorProt_Exec(); + } +} + +/** + * @brief Check abnormal feedback speed. + * @retval None. + */ +static void CheckSpdFbkStatus(void) +{ + static short errorCurrStatus = 0; + static short errorDeltaSpdStatus = 0; + NanDataDetect(); + if (g_mc.stateMachine == FSM_RUN) { + /* Detect the abnormal idq feedback current. */ + if (Abs(g_mc.idqRef.q - g_mc.idqFbk.q) >= CTRL_IF_CURR_AMP_A) { + errorCurrStatus++; + } else { + errorCurrStatus = 0; + } + /* Detect the abnormal feedback speed, the normal speed is > 0, if smo.spdEst < -10 && + delta speed error > USER_MIN_SPD_HZ + 10.0f at FSM_RUN stage, set the motor motion as error */ + if (g_mc.smo.spdEst < -10.0f && (g_mc.spdRefHz - g_mc.smo.spdEst > USER_MIN_SPD_HZ + 10.0f)) { + errorDeltaSpdStatus++; + } + } + /* Execute protect motion if count over 500 times, this error status caused by abnormal speed + or cabnormal urrent feedback, the detect time is 500 * 500us = 250ms. */ + if (errorCurrStatus >= 500) { + errorCurrStatus = 0; + SpdFbkErrorProt_Exec(); + } + /* This error statu caused by motor stalling, the detect time is 2 * 500us = 1ms. */ + if (errorDeltaSpdStatus >= 2) { + errorDeltaSpdStatus = 0; + g_mc.prot.motorErrStatus.Bit.motorStalling = 1; + } +} + +/** + * @brief Check Potentiometer Value callback function. + * @param param The TIMER_Handle. + * @retval None. + */ +void CheckPotentiometerValueCallback(void *param) +{ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + static float potentiomitorAdcValue = 0.0f; + static float spdCmdHz = 0; + static float spdCmdHzLast = USER_MIN_SPD_HZ; /* 35.0 is spdCmdHzLast init value */ + HAL_ADC_SoftTrigSample(&ADCPTT_HANDLE, ADCPTTSOCNUM); + BASE_FUNC_DELAY_US(10); /* Delay 10 us. */ + potentiomitorAdcValue = (float)HAL_ADC_GetConvResult(&ADCPTT_HANDLE, ADCPTTSOCNUM); + /* 4045.0 is adc sample max value of potentiomitor, convert max spd to 180.25Hz */ + spdCmdHz = potentiomitorAdcValue / 4045.0f * USER_MAX_SPD_HZ; + if (Abs(spdCmdHzLast - spdCmdHz) < 1.0f) { /* Ignore changes less than 1. */ + return; + } + spdCmdHzLast = spdCmdHz; + if (spdCmdHz < USER_MIN_SPD_HZ) { /* 35.0 is spdCmdHz lower limit */ + spdCmdHz = USER_MIN_SPD_HZ; /* 35.0 is spdCmdHz lower limit */ + } + if (spdCmdHz > g_mc.mtrParam.maxElecSpd) { /* spdCmdHz upper limit */ + spdCmdHz = g_mc.mtrParam.maxElecSpd; /* spdCmdHz upper limit */ + } + if (g_mc.spdAdjustMode == CUST_SPEED_ADJUST) { + g_mc.spdCmdHz = spdCmdHz; + } +} + +/** + * @brief System timer ISR for Motor Statemachine CallBack function. + * @param param The systick timer handle. + * @retval None. + */ +void MotorStatemachineCallBack(void *param) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + /* Read power board temprature and voltage. */ + ReadBoardTempAndUdc(); + /* Motor speed loop state machine. */ + TSK_SystickIsr(&g_mc, g_apt); + + /* Motor error speed feedback check. */ + CheckSpdFbkStatus(); + /* Motor stalling detect. */ + STP_Det_ByCurrSpd(&g_mc.prot.stall, &g_mc.prot.motorErrStatus, g_mc.smo.spdEst, g_mc.idqFbk); + STP_Exec(&g_mc.prot.motorErrStatus, g_apt); + + /* Motor over voltage detect. */ + OVP_Det(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + OVP_Exec(&g_mc.prot.ovp, &g_mc.spdRefHz, g_apt); + OVP_Recy(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* Motor lower voltage detect. */ + LVP_Det(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + LVP_Exec(&g_mc.prot.lvp, &g_mc.spdRefHz, g_apt); + LVP_Recy(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* Power board over temperature detect. */ + OTP_Det(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + OTP_Exec(&g_mc.prot.otp, &g_mc.spdRefHz, g_apt); + OTP_Recy(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + + /* If protect level == 4, set motor state as stop. */ + if (g_mc.prot.ovp.protLevel == LEVEL_4 || g_mc.prot.lvp.protLevel == LEVEL_4 \ + || g_mc.prot.otp.protLevel == LEVEL_4) { + SysCmdStopSet(&g_mc.statusReg); + } +} + +/** + * @brief The carrier ISR wrapper function. + * @param aptHandle The APT handle. + * @retval None. + */ +void MotorCarrierProcessCallback(void *aptHandle) +{ + MCS_ASSERT_PARAM(aptHandle != NULL); + BASE_FUNC_UNUSED(aptHandle); + /* the carrierprocess of motor */ + MCS_CarrierProcess(&g_mc); + /* Over current protect */ + if (g_mc.stateMachine == FSM_RUN || g_mc.stateMachine == FSM_STARTUP) { + OCP_Det(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus, g_mc.idqFbk); + OCP_Exec(&g_mc.prot.ocp, &g_mc.idqFbk, g_apt); /* Execute over current protect motion */ + if (g_mc.prot.ocp.protLevel < LEVEL_4) { + OCP_Recy(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus); + } + } +} + +/** + * @brief Event interrupt callback function of APT module. + * @param para APT module handle. + * @retval None. + */ +void MotorSysErrCallback(void *para) +{ + MCS_ASSERT_PARAM(para != NULL); + APT_Handle *handle = (APT_Handle *)para; + /* The IPM overcurrent triggers and disables the three-phase PWM output. */ + MotorPwmOutputDisable(g_apt); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_U], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_V], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_W], APT_OC_COMBINE_EVENT_A1); + /* Status setting error */ + SysErrorSet(&g_mc.statusReg); + DBG_PRINTF("APT error! \r\n"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + BASE_FUNC_UNUSED(handle); +} + +/** + * @brief Init motor controller's data structure. + * @retval None. + */ +static void InitSoftware(void) +{ + /* Initializing motor control param */ + TSK_Init(); + /* Read phase-uvw current */ + g_mc.readCurrUvwCb = ReadCurrUvw; + g_mc.setPwmDutyCb = SetPwmDutyCp; + g_mc.setADCTriggerTimeCb = SetADCTriggerTime; +} + +/** + * @brief Config the KEY func. + * @param handle The GPIO handle. + * @retval None. + */ +static KEY_State Key_StateRead(GPIO_Handle *handle) +{ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + BASE_FUNC_DELAY_MS(30); /* delay 30ms for deshake */ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + while (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + } + return KEY_DOWN; + } + } + return KEY_UP; +} + +/** + * @brief Control motor start and stop state by key func. + * @param param The GPIO handle. + * @retval None. + */ +void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + if (Key_StateRead(handle) == KEY_DOWN) { + if (g_mc.motorStateFlag == 0) { /* start motor */ + g_mc.motorStateFlag = 1; + SysCmdStartSet(&g_mc.statusReg); + } else if (g_mc.motorStateFlag == 1) { /* stop motor */ + g_mc.motorStateFlag = 0; + SysCmdStopSet(&g_mc.statusReg); + } + } +} + +/** + * @brief User application main entry function. + * @retval BSP_OK. + */ +int MotorMainProcess(void) +{ + unsigned int tickNum1Ms = 2; /* 1ms tick */ + static unsigned int tickCnt1Ms = 0; + unsigned int tickNum500Ms = 1000; /* 500ms tick */ + static unsigned int tickCnt500Ms = 0; + SystemInit(); + HMI_Init(); /* Init uart interrupt */ + HAL_TIMER_Start(&g_timer0); + HAL_TIMER_Start(&g_timer1); + + /* Disable PWM output before startup. */ + MotorPwmOutputDisable(g_apt); + /* Software initialization. */ + InitSoftware(); + /* Start the PWM clock. */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + /* System Timer clock. */ + BASE_FUNC_DELAY_MS(ADC_READINIT_DELAY); + TrimInitAdcShiftValue(&g_mc); + BASE_FUNC_DELAY_MS(MOTOR_START_DELAY); + while (1) { + /* Cycling send data to host */ + HMI_Process_Tx(&g_mc); + if (g_mc.msTickCnt - tickCnt1Ms >= tickNum1Ms) { + tickCnt1Ms = g_mc.msTickCnt; + /* User Code 1ms Event */ + HMI_Process_Rx(&g_mc); + /* User Code 1ms Event */ + } + + if (g_mc.msTickCnt - tickCnt500Ms >= tickNum500Ms) { + if (SysIsError(&g_mc.statusReg) != true) { + /* LED toggle in normal status. */ + HAL_GPIO_TogglePin(&LED1_HANDLE, LED1_PIN); + } + tickCnt500Ms = g_mc.msTickCnt; + } + } + return 0; +} diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c new file mode 100644 index 00000000..7c4f7525 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c @@ -0,0 +1,718 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of cust process interface. + */ + +#include "cust_process.h" +#include "mcs_ctlmode_config.h" +#include "mcs_math_const.h" +#include "mcs_user_config.h" +#include "mcs_assert.h" +#include "main.h" +#include "uart_module.h" +#include "mcs_mtr_param.h" +/* Macro definitions --------------------------------------------------------------------------- */ +/* Constant value. */ +#define CONST_VALUE_60 60.0f /* Constant value 60. */ +#define CONST_VALUE_DIV_1000 0.001f /* Constant value 1/1000. */ + +/* Data array index. */ +#define DATA_SEGMENT_ONE 0 /* First element of the data segment */ +#define DATA_SEGMENT_TWO 1 /* Second element of the data segment */ +#define DATA_SEGMENT_THREE 2 /* Third element of the data segment */ +#define DATA_SEGMENT_FOUR 3 /* Fourth element of the data segment */ +#define CUSTACKCODELEN 10 /* Ack code length */ + +/* Command code. */ +#define SET_PID_KP 0x01 /* Set Pid Kp Command Params */ +#define SET_PID_KI 0x02 /* Set Pid Ki Command Params */ +#define SET_PID_LIMIT 0x03 /* Set Pid limit Command Params */ + +#define SET_SMO1TH_PLL_BDW 0x01 /* Set Smo1th Pll BandWidth Command Params */ +#define SET_SMO1TH_SPDFLITER_FC 0x02 /* Set Smo1th Fc Command Params */ +#define SET_SMO1TH_FILCOMPANGLE 0x03 /* Set Smo1th FillComp Command Params */ + +#define SET_SMO4TH_KD 0x01 /* Set Smo4th Kd Command Params */ +#define SET_SMO4TH_KP 0x02 /* Set Smo4th Kq Command Params */ + +#define SET_SPD_COMMAND_HZ 0x01 /* Set Target Speed Command Params */ +#define SET_SPD_RMG_SLOPE 0x02 /* Set Speed Slope Command Params */ + +#define SET_MAX_ELEC_SPD 0x01 /* Set Max Motor Speed Command Params */ +#define SET_MOTOR_NUM_OF_PAIRS 0x02 /* Set Motor Command Params */ + +#define SET_MOTOR_RES_OF_STATOR 0x01 /* Set Motor Res Command Params */ +#define SET_MOTOR_DAXIS_INDUCTANCE 0x02 /* Set Motor Daxis Inductance Command Params */ +#define SET_MOTOR_QAXIS_INDUCTANCE 0x03 /* Set Motor Qaxis Inductance Command Params */ + +#define SET_SVPWM_VOLTAGE_PER_UNIT 0x01 /* Set Svpwm Voltage Params */ +#define SET_ADC_CURRENT_SAMPLE_COFE 0x02 /* Set Adc coffe Params */ +#define SET_CURRENT_LOOP_CONTROL_PERIOD 0x03 /* Set Current loop period Command Params */ + +#define SET_IF_TARGET_CURRENT_VALUE 0x01 /* Set If Target Params */ +#define SET_INCREMENT_OF_IF_CURRENT 0x02 /* Set If Step Command Params */ +#define SET_SPEED_RING_BEGIN_SPEED 0x03 /* Set If to Smo Start Speed Command Params */ + +static unsigned char ackCode = 0; +static unsigned char g_uartTxBuf[CUSTACKCODELEN] = {0}; + +/** + * @brief Set observer type. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverType(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + if (funcCode == FOC_OBSERVERTYPE_SMO1TH) { + ackCode = 0X01; + mtrCtrl->obserType = FOC_OBSERVERTYPE_SMO1TH; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->obserType); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH) { + ackCode = 0X02; + mtrCtrl->obserType = FOC_OBSERVERTYPE_SMO4TH; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->obserType); + } +} + +/** + * @brief Set pid parameter ack code. + * @param funcCode Received data funccode. + */ +static unsigned char SetPidAckCode(int funcCode) +{ + switch (funcCode) { + /* Set current loop D-Axis PID parameter ack code. */ + case FOC_CURDAXISPID_PARAMS: + ackCode = 0xE0; + break; + /* Set current loop Q-Axis PID parameter ack code. */ + case FOC_CURQAXISPID_PARAMS: + ackCode = 0xE3; + break; + /* Set speed loop PID parameter ack code. */ + case FOC_SPDPID_PARAMS: + ackCode = 0xE6; + break; + default: + break; + } + return ackCode; +} + +/** + * @brief Set pid parameters. + * @param pidHandle The pid control handle. + * @param rxData Receive buffer + */ +static void SetPidParams(PID_Handle *pidHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + switch (cmdCode) { + case SET_PID_KP: /* Set the P parameter. */ + PID_SetKp(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_KP), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_KI: /* Set the I parameter. */ + PID_SetKi(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_KI), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_LIMIT: /* Set the pid limit. */ + PID_SetLimit(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_LIMIT), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor pid parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorPidParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_CURDAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.dAxisPi, rxData); /* Set Curr loop Daxis pid params */ + } else if (funcCode == FOC_CURQAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.qAxisPi, rxData); /* Set Curr loop Qaxis pid params */ + mtrCtrl->currCtrl.dAxisPi.upperLimit = mtrCtrl->currCtrl.qAxisPi.upperLimit; + mtrCtrl->currCtrl.dAxisPi.lowerLimit = mtrCtrl->currCtrl.qAxisPi.lowerLimit; + } else if (funcCode == FOC_SPDPID_PARAMS) { + SetPidParams(&mtrCtrl->spdCtrl.spdPi, rxData); /* Set Speed loop params */ + } +} + +/** + * @brief Set first order sliding mode observer parameters. + * @param smoHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo1thParams(FOSMO_Handle *smoHandle, CUSTDATATYPE_DEF *rxData) +{ + smoHandle->kSmo = rxData->data[DATA_SEGMENT_TWO].typeF; + ackCode = 0X09; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->kSmo); +} + +/** + * @brief Set first order sliding mode observer's phase-locked loop parameters. + * @param smoHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo1thPLLParams(FOSMO_Handle *smoHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + float pllBdw = 0.0f; + switch (cmdCode) { + case SET_SMO1TH_PLL_BDW: /* Set the bandwidth. */ + pllBdw = rxData->data[DATA_SEGMENT_THREE].typeF; + smoHandle->pll.pi.kp = 2.0f * pllBdw; /* kp = 2.0f * pllBdw */ + smoHandle->pll.pi.ki = pllBdw * pllBdw; /* ki = pllBdw * pllBdw */ + ackCode = 0X0A; + CUST_AckCode(g_uartTxBuf, ackCode, pllBdw); + break; + case SET_SMO1TH_SPDFLITER_FC: /* Set the cutoff frequency. */ + smoHandle->spdFilter.fc = rxData->data[DATA_SEGMENT_THREE].typeF; + smoHandle->spdFilter.a1 = 1.0f / (1.0f + DOUBLE_PI * smoHandle->spdFilter.fc * CTRL_CURR_PERIOD); + smoHandle->spdFilter.b1 = 1.0f - smoHandle->spdFilter.a1; + ackCode = 0X0B; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->spdFilter.fc); + break; + case SET_SMO1TH_FILCOMPANGLE: /* Set the compensation angle. */ + smoHandle->filCompAngle = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0C; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->filCompAngle); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set fourth order sliding mode observer parameters. + * @param smo4thHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo4thParams(SMO4TH_Handle *smo4thHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SMO4TH_KD: /* Set d axis gain. */ + smo4thHandle->kd = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0D; + CUST_AckCode(g_uartTxBuf, ackCode, smo4thHandle->kd); + break; + case SET_SMO4TH_KP: /* Set q axis gain. */ + smo4thHandle->kq = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0E; + CUST_AckCode(g_uartTxBuf, ackCode, smo4thHandle->kq); + break; + default: + break; + } +} + +/** + * @brief Set fourth order sliding mode observer's phase-locked loop parameters. + * @param smo4thHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo4thPLLParams(SMO4TH_Handle *smo4thHandle, CUSTDATATYPE_DEF *rxData) +{ + float pllBdw = rxData->data[DATA_SEGMENT_TWO].typeF; + smo4thHandle->pll.pi.kp = (2.0f) * pllBdw; /* kp = 2.0f * pllBdw */ + smo4thHandle->pll.pi.ki = pllBdw * pllBdw; + ackCode = 0X11; + CUST_AckCode(g_uartTxBuf, ackCode, pllBdw); +} + +/** + * @brief Set observer parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_OBSERVERTYPE_SMO1TH) { + SetObserverSmo1thParams(&mtrCtrl->smo, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO1TH_PLL) { + SetObserverSmo1thPLLParams(&mtrCtrl->smo, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH) { + SetObserverSmo4thParams(&mtrCtrl->smo4th, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH_PLL) { + SetObserverSmo4thPLLParams(&mtrCtrl->smo4th, rxData); + } +} + +/** + * @brief Set motor speed and speed slope. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorSpdAndSlope(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SPD_COMMAND_HZ: /* Set target speed(hz). */ + mtrCtrl->spdCmdHz = rxData->data[DATA_SEGMENT_THREE].typeF * mtrCtrl->mtrParam.mtrNp / CONST_VALUE_60; + /* Judgement the value > 0.00001, make sure denominator != 0. */ + if (rxData->data[DATA_SEGMENT_FOUR].typeF > 0.00001f) { + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_FOUR].typeF * CTRL_SYSTICK_PERIOD; + } + ackCode = 0X16; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->spdCmdHz); + break; + case SET_SPD_RMG_SLOPE: /* Set speed slope. */ + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_THREE].typeF * CTRL_SYSTICK_PERIOD; + ackCode = 0X17; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor base parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorBaseParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MAX_ELEC_SPD: /* Set max electric speed. */ + mtrParamHandle->maxElecSpd = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrParamHandle->mtrNp; + ackCode = 0X18; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_MOTOR_NUM_OF_PAIRS: /* Set the number of motor pole pairs. */ + mtrParamHandle->mtrNp = (unsigned short)(rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = 0X19; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrParamHandle->mtrNp); + break; + default: + break; + } +} + +/** + * @brief Set motor special parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorSpecialParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MOTOR_RES_OF_STATOR: /* Set the resistor of stator. */ + mtrParamHandle->mtrRs = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1A; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrRs); + break; + case SET_MOTOR_DAXIS_INDUCTANCE: /* Set the d axis inductance. */ + mtrParamHandle->mtrLd = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1B; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLd); + break; + case SET_MOTOR_QAXIS_INDUCTANCE: /* Set the q axis inductance. */ + mtrParamHandle->mtrLq = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1C; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLq); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor board parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetMotorBoardParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SVPWM_VOLTAGE_PER_UNIT: /* Set svpwm voltage per unit. */ + mtrCtrl->sv.voltPu = rxData->data[DATA_SEGMENT_THREE].typeF * ONE_DIV_SQRT3; + mtrCtrl->currCtrl.outLimit = mtrCtrl->sv.voltPu * ONE_DIV_SQRT3; + ackCode = 0X1D; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_ADC_CURRENT_SAMPLE_COFE: /* Set adc current sample cofeature. */ + mtrCtrl->adcCurrCofe = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1E; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->adcCurrCofe); + break; + case SET_CURRENT_LOOP_CONTROL_PERIOD: /* Set current loop control period. */ + mtrCtrl->currCtrlPeriod = 1 / rxData->data[DATA_SEGMENT_THREE].typeF * CONST_VALUE_DIV_1000; + ackCode = 0X1F; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == MOTOR_PARAMS_BASE) { + SetMotorBaseParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_SPECIAL) { + SetMotorSpecialParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_BOARD) { + SetMotorBoardParams(mtrCtrl, rxData); + } +} + +/** + * @brief Motor start. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStart(MTRCTRL_Handle *mtrCtrl) +{ + if (mtrCtrl->stateMachine != FSM_RUN) { + SysCmdStartSet(&mtrCtrl->statusReg); /* start motor. */ + mtrCtrl->motorStateFlag = 1; + ackCode = 0X24; /* send ackcode to host. */ + CUST_AckCode(g_uartTxBuf, ackCode, 1); + } +} + +/** + * @brief Motor stop. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStop(MTRCTRL_Handle *mtrCtrl) +{ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + ackCode = 0X25; + CUST_AckCode(g_uartTxBuf, ackCode, 0); +} + +/** + * @brief Motor state reset. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorReset(MTRCTRL_Handle *mtrCtrl) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_SoftReset(); +} + +/** + * @brief Set IF-Startup parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetStartupIFParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_IF_TARGET_CURRENT_VALUE: /* Set I/F start up target current value. */ + mtrCtrl->ifCtrl.targetAmp = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X26; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.targetAmp); + break; + case SET_INCREMENT_OF_IF_CURRENT: /* Set increment of I/F start up current. */ + mtrCtrl->ifCtrl.stepAmp = mtrCtrl->ifCtrl.targetAmp / rxData->data[DATA_SEGMENT_THREE].typeF * + CTRL_SYSTICK_PERIOD; + ackCode = 0X27; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.stepAmp); + break; + case SET_SPEED_RING_BEGIN_SPEED: /* Set speed ring begin speed. */ + mtrCtrl->startup.spdBegin = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrCtrl->mtrParam.mtrNp; + ackCode = 0X28; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set start up parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetStartupParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_STARTUP_IF) { + SetStartupIFParams(mtrCtrl, rxData); + } +} + +/** + * @brief Set adjust speed mode. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetAdjustSpdMode(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get commond code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + if (funcCode == HOST_SPEED_ADJUST) { + mtrCtrl->spdAdjustMode = HOST_SPEED_ADJUST; + /* Uart connect success. */ + mtrCtrl->uartConnectFlag = CONNECTING; + ackCode = 0X2A; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + } else if (funcCode == CUST_SPEED_ADJUST) { + if (cmdCode == 1) { /* If uart connection disconnected & stop motor commond. */ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + } + mtrCtrl->spdAdjustMode = CUST_SPEED_ADJUST; + ackCode = 0X2B; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + /* Uart disconnect. */ + mtrCtrl->uartConnectFlag = DISCONNECT; + } +} + +/** + * @brief Check uart connect. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_UartHandShake(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); +} + +/** + * @brief Set Motor Initial Status Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorInitParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_OBSERVER_TYPE: { /* Set observer type. */ + CMDCODE_SetObserverType(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_PID_PARAMS: { /* Set motor pid parameters. */ + CMDCODE_SetMotorPidParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_OBSERVER_PARAMS: { /* Set observer parameters. */ + CMDCODE_SetObserverParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_TARGETSPD: { /* Set motor speed and speed slope. */ + CMDCODE_SetMotorSpdAndSlope(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_PARAMS: { /* Set motor parameters. */ + CMDCODE_SetMotorParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_ADJUSTSPD_MODE: /* Set adjust speed mode. */ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); + break; + default: + break; + } +} + +/** + * @brief Set Motor Control System Status. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorState(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + BASE_FUNC_UNUSED(rxData); + switch (code) { + case CMDCODE_MOTOR_START: { /* Motor start command */ + CMDCODE_MotorStart(mtrCtrl); + } + break; + case CMDCODE_MOTOR_STOP: { /* Motor stop command */ + CMDCODE_MotorStop(mtrCtrl); + } + break; + case CMDCODE_MOTORSTATE_RESET: { /* Motor reset command */ + CMDCODE_MotorReset(mtrCtrl); + } + break; + default: + break; + } +} + +/** + * @brief Set Startup and Uart Link Handshake Flag Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetOtherParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_STARTUP_PARAMS: /* Set start up parameters. */ + CMDCODE_SetStartupParams(mtrCtrl, rxData); + break; + case CMDCODE_UART_HANDSHAKE: { /* Check uart hand shake. */ + CMDCODE_UartHandShake(mtrCtrl, rxData); + } + break; + case CMDCODE_UART_HEARTDETECT: { /* Check uart hand shake. */ + mtrCtrl->uartHeartDetCnt++; + } + break; + default: + break; + } +} +/** + * @brief Instruction code executor. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_Process(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + CMDCODE_EXE_SetMotorInitParams(mtrCtrl, rxData, code); + CMDCODE_EXE_SetMotorState(mtrCtrl, rxData, code); + CMDCODE_EXE_SetOtherParams(mtrCtrl, rxData, code); +} + +/** + * @brief Host data download callback and data parsing. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + + /* Uart data storage struct */ + CUSTDATATYPE_DEF data; + volatile unsigned char *ptrCnt = &rxBuf[FRAME_CHECK_BEGIN + 1]; + volatile unsigned char *strCnt = &data.data[0].typeCh[0]; + for (unsigned int j = 0; j < FRAME_RECV_DATA_LENTH * FRAME_ONE_DATA_LENTH; j++) { + *strCnt++ = *ptrCnt++; + } + /* Message function code. */ + data.code = rxBuf[FRAME_CHECK_BEGIN]; + CMDCODE_EXE_Process(mtrCtrl, &data, data.code); +} + +/** + * @brief The host computer displays data transmission. + * @param mtrCtrl The motor control handle. + * @param txData Message content. + * @param stage Message status function code. + */ +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txData != NULL); + if (mtrCtrl->stateMachine == FSM_IDLE) { + mtrCtrl->smo.spdEst = 0.0f; + } + /* Data send to host. */ + txData->data[CURRDQ_Q].typeF = mtrCtrl->idqFbk.q; + txData->data[CURRDQ_D].typeF = mtrCtrl->idqFbk.d; + txData->data[CURRREFDQ_Q].typeF = mtrCtrl->idqRef.q; + txData->data[CURRREFDQ_D].typeF = mtrCtrl->idqRef.d; + /* Motor current speed. */ + txData->data[CURRSPD].typeF = mtrCtrl->smo.spdEst * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Motor commond speed. */ + txData->data[SPDCMDHZ].typeF = mtrCtrl->spdCmdHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Bus voltage. */ + txData->data[UDC].typeF = mtrCtrl->udc; + /* Power board temprature. */ + txData->data[POWERBOARDTEMP].typeF = mtrCtrl->powerBoardTemp; + /* Motor protection status flag. */ + txData->data[CUST_ERR_CODE].typeI = mtrCtrl->prot.motorErrStatus.all; + /* Three phase current. */ + txData->data[CURRUVW_U].typeF = mtrCtrl->currUvw.u; + txData->data[CURRUVW_V].typeF = mtrCtrl->currUvw.v; + txData->data[CURRUVW_W].typeF = mtrCtrl->currUvw.w; + /* Three phase pwm duty. */ + txData->data[PWMDUTYUVW_U].typeF = mtrCtrl->dutyUvw.u; + txData->data[PWMDUTYUVW_V].typeF = mtrCtrl->dutyUvw.v; + txData->data[PWMDUTYUVW_W].typeF = mtrCtrl->dutyUvw.w; + /* Motor electric angle. */ + txData->data[AXISANGLE].typeF = mtrCtrl->axisAngle; + txData->data[VDQ_Q].typeF = mtrCtrl->vdqRef.q; + txData->data[VDQ_D].typeF = mtrCtrl->vdqRef.d; + txData->data[SPDREFHZ].typeF = mtrCtrl->spdRefHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + txData->data[SENDTIMESTAMP].typeF = mtrCtrl->uartTimeStamp; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h new file mode 100644 index 00000000..60fe69bb --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h @@ -0,0 +1,36 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "protocol.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); + +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c new file mode 100644 index 00000000..58bf15a7 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c @@ -0,0 +1,57 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of human-machine interface. + */ + +#include "hmi_module.h" +#include "mcs_assert.h" + +/** + * @brief HMI Initializatio. + * @retval None. + */ +void HMI_Init(void) +{ + UartRecvInit(); +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Rx(mtrCtrl); +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Tx(mtrCtrl); +} diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h new file mode 100644 index 00000000..056f8d73 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h @@ -0,0 +1,37 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "uart_module.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void HMI_Init(void); + +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl); +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c new file mode 100644 index 00000000..56f0c0bb --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c @@ -0,0 +1,174 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ + +#include "protocol.h" +#include "apt.h" +#include "typedefs.h" +#include "main.h" +#include "mcs_assert.h" +#include "cust_process.h" + +/** + * @brief Callback function for receiving data analysis and processing. + * @param rxBuf Receive buffer. + */ +__weak void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(rxBuf); +} +/** + * @brief User-defined protocol message sending function (weak function). + * @param rxData Sending Messages.. + */ +__weak void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(*txData); +} + +static void (*g_ptrDataProcess)(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) = CUST_UartDataProcess; + +/** + * @brief Frame checksum. + * @param ptr Pointer to the data to be checked + * @param num Number of bytes + * @retval unsigned char Checksum + */ +static unsigned char CheckSum(unsigned char *ptr, unsigned char num) +{ + unsigned char sum = 0; + unsigned char *p = ptr; + /* Calculate the sum of received data. */ + for (unsigned char i = 0; i < num; i++) { + sum += (unsigned char)*p; + p++; + } + return sum; +} + +/** + * @brief Transmitting Data Frames. + * @param mtrCtrl The motor control handle. + * @param txBuf Sending Messages. + */ +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txBuf != NULL); + unsigned int dataLen = FRAME_ONE_DATA_LENTH * SEND_FRAME_DATA_NUM; + unsigned char i = 0; + CUSTDATATYPE_DEF txData = {0}; + CUST_SetTxMsg(mtrCtrl, &txData); + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_SENT; + /* Message data */ + for (unsigned char x = 0; x < SEND_FRAME_DATA_NUM; x++) { + unsigned char floatIndex = 0; + unsigned char byteOffset = i; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + } + /* Message verification domain */ + txBuf[dataLen + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[dataLen + i++] = FRAME_END; + return dataLen + i; +} + +/** + * @brief Transmitting Data Frames. + * @param txBuf Sending Cust Ack Code. + * @param ackCode Ack Code. + * @param varParams Host set parameter. + */ +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(txBuf != NULL); + CUSTDATATYPE_DEF txData = {0}; + int dataIndex = 0; + unsigned int i = 0; + unsigned int txLen = 0; + unsigned char dataLen = FRAME_ONE_CHAR_LENTH + FRAME_ONE_DATA_LENTH; + + txData.data[0].typeF = varParams; + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_CUSTACK; + /* Message ack code */ + txBuf[i++] = ackCode; + /* Message data */ + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + + /* Message verification domain */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = FRAME_END; + txLen = FRAME_ONE_CHAR_LENTH + i++; + HAL_UART_WriteDMA(&g_uart0, txBuf, txLen); +} + +/** + * @brief Cust receive data process. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + unsigned char g_uartTxBuf[10] = {0}; + unsigned char ackCode = 0; + /* Frame header check */ + if (rxBuf[0] != FRAME_START) { + ackCode = 0X78; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Frame trailer check */ + if (rxBuf[FRAME_LENTH - 1] != FRAME_END) { + ackCode = 0X79; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Checksum */ + if (CheckSum((unsigned char*)&rxBuf[FRAME_CHECK_BEGIN], FRAME_CHECK_NUM) != rxBuf[FRAME_CHECKSUM]) { + ackCode = 0X7A; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } else { + if (g_ptrDataProcess == NULL) { + return; + } else { + g_ptrDataProcess(mtrCtrl, rxBuf); + } + } +} diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h new file mode 100644 index 00000000..900a00d8 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h @@ -0,0 +1,121 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ +#ifndef McsMagicTag_PORTOCOL_H +#define McsMagicTag_PORTOCOL_H + +#include "uart.h" +#include "mcs_carrier.h" + +#define RS485_SEND_ENABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = GPIO_PIN_7 +#define RS485_SEND_DISABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = BASE_CFG_UNSET + +#define RX_BUF_LEN (16) +#define SEND_FRAME_DATA_NUM (CUSTDATA_MAX) +/* Service Uart0 Communication Deal */ +#define FRAME_ONE_DATA_LENTH 4 +#define FRAME_ONE_CHAR_LENTH 1 +#define FRAME_RECV_DATA_LENTH 4 +#define FRAME_LENTH 20 /* Data length */ +#define FRAME_SENT 0X8F +#define FRAME_CUSTACK 0X8A +#define FRAME_START 0x0F /* Start frame */ +#define FRAME_END '/' /* StOP frame */ +#define FRAME_CHECK_BEGIN 1 /* Check frame */ +#define FRAME_CHECKSUM 18 /* Check sum */ +#define FRAME_CHECK_NUM 17 +#define CMDCODE_IDLE_FRAME 0x55 /* Fill frame */ +#define CMDCODE_GET_MOTOR_PARAMS 0x01 +#define CMDCODE_SEND_MOTOR_PARAMS 0x02 +#define CMDCODE_SET_MOTOR_CTLMODE 0x03 +#define CMDCODE_SET_OBSERVER_TYPE 0x04 +#define CMDCODE_SET_STARTUP_MODE 0x05 +#define CMDCODE_SET_PID_PARAMS 0x06 +#define CMDCODE_SET_STARTUP_PARAMS 0x07 +#define CMDCODE_SET_OBSERVER_PARAMS 0x08 +#define CMDCODE_SET_MOTOR_TARGETSPD 0x09 +#define CMDCODE_SET_MOTOR_PARAMS 0x0A +#define CMDCODE_MOTOR_START 0x0B +#define CMDCODE_MOTOR_STOP 0x0C +#define CMDCODE_MOTORSTATE_RESET 0x0D +#define CMDCODE_SEND_FIRMVERSION 0x0E +#define CMDCODE_SET_ADJUSTSPD_MODE 0x11 +#define CMDCODE_UART_HANDSHAKE 0x12 +#define CMDCODE_UART_HEARTDETECT 0x13 + +typedef union { + unsigned char typeCh[4]; + float typeF; + int typeI; +} UNIONDATATYPE_DEF; + +typedef enum { + OFFLINE_RES = 0, + OFFLINE_LD, + OFFLINE_LQ, + OFFLINE_PSIF, + OFFLINE_JS, + OFFLINE_NP, + OFFLINE_B, + OFFLINE_KPD, + OFFLINE_KID, + OFFLINE_KPQ, + OFFLINE_KIQ, + OFFLINE_KPS, + OFFLINE_KIS, + OFFLINE_SPEED, + OFLINE_MAX +} OFFLINE_IDEN_TYPE; + +typedef enum { + CURRDQ_Q = 0, + CURRDQ_D, + CURRREFDQ_Q, + CURRREFDQ_D, + CURRSPD, + SPDCMDHZ, + UDC, + POWERBOARDTEMP, + CUST_ERR_CODE, + CURRUVW_U, + CURRUVW_V, + CURRUVW_W, + PWMDUTYUVW_U, + PWMDUTYUVW_V, + PWMDUTYUVW_W, + AXISANGLE, + VDQ_Q, + VDQ_D, + SPDREFHZ, + SENDTIMESTAMP, + CUSTDATA_MAX +} SENDTOHOSTPARAMS; + +typedef struct { + volatile unsigned char code; + volatile UNIONDATATYPE_DEF data[SEND_FRAME_DATA_NUM]; +} CUSTDATATYPE_DEF; + + +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf); +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams); +#endif /* McsMagicTag_PORTOCOL_H */ diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c new file mode 100644 index 00000000..df5e9186 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c @@ -0,0 +1,184 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#include "uart_module.h" +#include "debug.h" +#include "main.h" +#include "baseinc.h" + +/* Buffer size */ +#define UI_TX_BUF_LEN (96) +#define UI_RX_BUF_LEN (96) + +/* Receiving Timeout Interval */ +#define UART_TIME_OUT_MS (100) + +/* Start sending data to host delay after uart connect success */ +#define UART_UPDATA_DELAY_TIME_MS (50) + +/* Data buffer */ +unsigned char g_uartRxBuf[UI_RX_BUF_LEN] = {0}; +unsigned char g_uartTxBuf[UI_TX_BUF_LEN] = {0}; +static unsigned int getdeltaSystickCnt = 0; +static FRAME_Handle g_uartFrame; +/** + * @brief Receive Data Clear. + * @param uartFrame Receice Data. + * @retval None. + */ +static void FrameRecvClear(FRAME_Handle *uartFrame) +{ + /* Clear buffer lenth. */ + uartFrame->buffLen = 0; + uartFrame->timeOutCnt = 0; + uartFrame->frameFlag = 0; + /* Clear received data lenth. */ + uartFrame->rxLen = 0; + /* Clear received flag. */ + uartFrame->rxFlag = 0; + uartFrame->upDataCnt = 0; + uartFrame->rxAckFlag = 0; +} + +/** + * @brief Set Dma status. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void SetUartDmaStatus(MTRCTRL_Handle *mtrCtrl) +{ + /* Delay 50ms start uart Tx DMA . */ + if (mtrCtrl->uartConnectFlag == CONNECTING && g_uartFrame.upDataDelayCnt++ > UART_UPDATA_DELAY_TIME_MS) { + g_uartFrame.txFlag = 1; /* Start send data flag. */ + mtrCtrl->uartConnectFlag = CONNECTED; + g_uartFrame.upDataDelayCnt = 0; + } + if (mtrCtrl->uartConnectFlag == DISCONNECT) { + g_uartFrame.txFlag = 0; /* Stop send data flag. */ + mtrCtrl->uartTimeStamp = 0; + } +} + +/** + * @brief Uart Dma interupt callback func. + * @param handle Uart handle. + * @retval None. + */ +void UART0_TXDMACallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + unsigned int getCurSystickCnt = 0; + static unsigned int getlastSystickCnt = 0; + /* USER CODE BEGIN UART0_WRITE_DMA_FINISH */ + g_uartFrame.txFlag = 1; + /* Received information answered, information update reserved. */ + if (g_uartFrame.rxAckFlag == 1) { + g_uartFrame.uartItTxFlag = 1; + g_uartFrame.rxAckFlag = 0; + } + getCurSystickCnt = DCL_SYSTICK_GetTick(); + if (getlastSystickCnt != 0) { + /* Calculate unit frame data send time */ + getdeltaSystickCnt = getCurSystickCnt - getlastSystickCnt; + } + getlastSystickCnt = getCurSystickCnt; + /* USER CODE END UART0_WRITE_DMA_FINISH */ +} + +/** + * @brief Uart0 Interruput Read CallBack Function. + * @param handle Uart handle. + * @retval None. + */ +void UART0ReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_READ_IT_FINISH */ + if (g_uartFrame.rxLen >= UI_RX_BUF_LEN - 1) { + g_uartFrame.rxLen = 0; + } + HAL_UART_ReadIT(handle, &g_uartFrame.rxData, 1); + g_uartRxBuf[g_uartFrame.rxLen] = g_uartFrame.rxData; + g_uartFrame.rxLen++; + g_uartFrame.rxFlag = 1; + g_uartFrame.uartItTxFlag = 0; + return; + /* USER CODE END UART0_READ_IT_FINISH */ +} + +/** + * @brief Uart Read Data Init Function. + * @param void. + * @retval None. + */ +void UartRecvInit(void) +{ + /* Uart reception initialization */ + FrameRecvClear(&g_uartFrame); + HAL_UART_ReadIT(&g_uart0, &g_uartFrame.rxData, 1); +} + +/** + * @brief Uart Read Data Process Function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SetUartDmaStatus(mtrCtrl); + if (g_uartFrame.rxFlag == 1) { /* Receive data flag. */ + if (g_uartFrame.timeOutCnt++ > UART_TIME_OUT_MS) { + /* Received data from the host. */ + g_uartFrame.frameFlag = 1; + g_uartFrame.rxFlag = 0; + g_uartFrame.timeOutCnt = 0; + /* Execute data process. */ + CUST_DataReceProcss(mtrCtrl, g_uartRxBuf); + g_uartFrame.rxAckFlag = 1; + g_uartFrame.rxLen = 0; + } + } + g_uartFrame.frameFlag = 0; +} + +/** + * @brief Uart Write Data Process Function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + if (g_uartFrame.txFlag == 1) { /* Send data flag. */ + mtrCtrl->uartTimeStamp = (float)getdeltaSystickCnt; /* Unit data time stamp */ + g_uartFrame.upDataCnt = 0; + g_uartFrame.txFlag = 0; + /* Send data to host. */ + unsigned int txLen = CUST_TransmitData(mtrCtrl, g_uartTxBuf); + /* If txIT mode send data finish, convert to DMA mode */ + if (g_uartFrame.uartItTxFlag == 1) { + HAL_UART_WriteDMA(&g_uart0, g_uartTxBuf, txLen); + } + } +} diff --git a/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h new file mode 100644 index 00000000..f1f8f899 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h @@ -0,0 +1,47 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#ifndef McsMagicTag_UART_MODULE_H +#define McsMagicTag_UART_MODULE_H + +#include "protocol.h" +#include "mcs_ctlmode_config.h" + +typedef struct { + unsigned int buffLen; + unsigned int timeOutCnt; + unsigned char frameFlag; + unsigned int rxLen; + unsigned char rxFlag; + unsigned char txFlag; + unsigned char rxData; + unsigned int upDataCnt; + unsigned int upDataDelayCnt; + unsigned char uartItTxFlag; + unsigned char rxAckFlag; +} FRAME_Handle; + + +void UartRecvInit(void); +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl); +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/readme.md b/vendor/yibaina_3061M/E7050_Six_Step_Wave/readme.md new file mode 100644 index 00000000..2e0a0107 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/readme.md @@ -0,0 +1,13 @@ +# Bldc_Sensorless_Six_Step_Wave + +**【功能描述】** ++ 基于反电动势采样的无感电机六步方波调速系统应用 + +**【环境要求】** ++ 所用单板电源为12V低压,电机选用GBM2804H-100T云台电机 + +**【IDE配置方法】** ++ chipConfig中的sample栏目里面选中Bldc Sensorless Six Step Wave示例,然后点击生成代码即可 + +**【注意事项】** ++ 供电电源12V \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/feature.h b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/feature.h new file mode 100644 index 00000000..13108bb3 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/feature.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-23 14:18:03 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define CHIP_3061MNPICA MACRO_ENABLE + +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 30000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_UART_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/main.h b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/main.h new file mode 100644 index 00000000..55b93f82 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/main.h @@ -0,0 +1,84 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.h + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-23 14:18:03 + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_SYSTEM_INIT_H +#define McuMagicTag_SYSTEM_INIT_H + +#include "adc.h" +#include "adc_ex.h" +#include "acmp.h" +#include "acmp_ex.h" +#include "apt.h" +#include "uart.h" +#include "uart_ex.h" +#include "gpio.h" +#include "timer.h" +#include "timer_ex.h" +#include "crg.h" +#include "iocmg.h" + +#define IO_SPEED_FAST 0x00U +#define IO_SPEED_SLOW 0x01U + +#define IO_DRV_LEVEL4 0x00U +#define IO_DRV_LEVEL3 0x01U +#define IO_DRV_LEVEL2 0x02U +#define IO_DRV_LEVEL1 0x03U + +#define XTAL_DRV_LEVEL4 0x03U +#define XTAL_DRV_LEVEL3 0x02U +#define XTAL_DRV_LEVEL2 0x01U +#define XTAL_DRV_LEVEL1 0x00U + +#define SYS_LED_PIN GPIO_PIN_3 +#define SYS_LED_HANDLE g_gpio2 +#define GpioStartStop_PIN GPIO_PIN_4 +#define GpioStartStop_HANDLE g_gpio2 + +extern ACMP_Handle g_acmp0; +extern TIMER_Handle g_timer1; +extern UART_Handle g_uart0; +extern APT_Handle g_apt0; +extern APT_Handle g_apt1; +extern APT_Handle g_apt2; +extern ADC_Handle g_adc0; + +extern GPIO_Handle g_gpio1; +extern GPIO_Handle g_gpio2; + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect); +void SystemInit(void); + +void MotorStatemachineCallBack(void *handle); +void TIMER1_DMAOverFlow_InterruptProcess(void *handle); +void MotorCarrierProcessCallback(void *aptHandle); +void MotorSysErrCallback(void *aptHandle); + +void MotorStartStopKeyCallback(void *param); + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_SYSTEM_INIT_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/system_init.c b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/system_init.c new file mode 100644 index 00000000..76ec601a --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/generatecode/system_init.c @@ -0,0 +1,530 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file system_init.c + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-23 14:18:03 + */ + +#include "main.h" +#include "ioconfig.h" +#include "iocmg_ip.h" + +#define UART0_BAUD_RATE 115200 + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) +{ + CRG_Handle crg; + crg.baseAddress = CRG; + crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC; + crg.pllPreDiv = CRG_PLL_PREDIV_4; + crg.pllFbDiv = 48; /* PLL Multiplier 48 */ + crg.pllPostDiv = CRG_PLL_POSTDIV_2; + crg.coreClkSelect = CRG_CORE_CLK_SELECT_PLL; + crg.handleEx.pllPostDiv2 = CRG_PLL_POSTDIV2_3; + crg.handleEx.clk1MSelect = CRG_1M_CLK_SELECT_HOSC; + crg.handleEx.clk1MDiv = (25 - 1); /* The 1 MHz freq is equal to the input clock frequency / (clk_1m_div + 1). 25 is the div of the clk_1m in CLOCK. */ + + if (HAL_CRG_Init(&crg) != BASE_STATUS_OK) { + return BASE_STATUS_ERROR; + } + *coreClkSelect = crg.coreClkSelect; + return BASE_STATUS_OK; +} + +static void ACMP0_Init(void) +{ + HAL_CRG_IpEnableSet(ACMP0_BASE, IP_CLK_ENABLE); /* ACMP clock bit reset. */ + g_acmp0.baseAddress = ACMP0_BASE; + g_acmp0.inOutConfig.inputNNum = ACMP_INPUT_N_SELECT2; + g_acmp0.inOutConfig.inputPNum = ACMP_INPUT_P_SELECT2; + g_acmp0.inOutConfig.polarity = ACMP_OUT_NOT_INVERT; + g_acmp0.filterCtrl.filterMode = ACMP_FILTER_NONE; + g_acmp0.hysteresisVol = ACMP_HYS_VOL_30MV; + g_acmp0.interruptEn = BASE_CFG_UNSET; + HAL_ACMP_Init(&g_acmp0); +} + +static void ADC0_Init(void) +{ + HAL_CRG_IpEnableSet(ADC0_BASE, IP_CLK_ENABLE); + HAL_CRG_IpClkSelectSet(ADC0_BASE, CRG_ADC_CLK_ASYN_PLL_DIV); + HAL_CRG_IpClkDivSet(ADC0_BASE, CRG_ADC_DIV_1); + + g_adc0.baseAddress = ADC0; + g_adc0.socPriority = ADC_PRIMODE_ALL_ROUND; + + HAL_ADC_Init(&g_adc0); + + SOC_Param socParam = {0}; + socParam.adcInput = ADC_CH_ADCINA11; /* PIN9(ADC AIN11) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM5, &socParam); + + socParam.adcInput = ADC_CH_ADCINA12; /* PIN10(ADC AIN12) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM2, &socParam); + + socParam.adcInput = ADC_CH_ADCINA10; /* PIN8(ADC AIN10) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM6, &socParam); + + socParam.adcInput = ADC_CH_ADCINA9; /* PIN7(ADC AIN9) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM9, &socParam); +} + +__weak void MotorSysErrCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_EVENT_INTERRUPT */ + /* USER CODE END APT0_EVENT_INTERRUPT */ +} + +__weak void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +static void APT0_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_ENABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt0, &protectApt); +} + +static void APT0_Init(void) +{ + HAL_CRG_IpEnableSet(APT0_BASE, IP_CLK_ENABLE); + + g_apt0.baseAddress = APT0; + + /* Clock Settings */ + g_apt0.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt0.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt0.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt0.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt0.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.divInitVal = 0; + g_apt0.waveform.cntInitVal = 0; + g_apt0.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt0.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt0.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt0.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt0.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCA = 6000; /* 6000 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt0.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCA = 1; + + /* ADC Trigger SOCB */ + g_apt0.adcTrg.trgEnSOCB = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCB = 1; + g_apt0.adcTrg.trgSrcSOCB = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCB = 1; + + g_apt0.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + /* Timer Trigger */ + g_apt0.tmrInterrupt.tmrInterruptEn = BASE_CFG_ENABLE; + g_apt0.tmrInterrupt.tmrInterruptSrc = APT_INT_SRC_CNTR_CMPC_UP; + g_apt0.tmrInterrupt.tmrInterruptScale = 1; + + APT0_ProtectInit(); + + HAL_APT_PWMInit(&g_apt0); + HAL_APT_RegisterCallBack(&g_apt0, APT_EVENT_INTERRUPT, MotorSysErrCallback); + IRQ_SetPriority(IRQ_APT0_EVT, 7); /* 7 is priority value */ + IRQ_Register(IRQ_APT0_EVT, HAL_APT_EventIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_EVT); + HAL_APT_RegisterCallBack(&g_apt0, APT_TIMER_INTERRUPT, MotorCarrierProcessCallback); + IRQ_SetPriority(IRQ_APT0_TMR, 6); /* 6 is priority value */ + IRQ_Register(IRQ_APT0_TMR, HAL_APT_TimerIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_TMR); +} + +static void APT1_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt1, &protectApt); +} + +static void APT1_Init(void) +{ + HAL_CRG_IpEnableSet(APT1_BASE, IP_CLK_ENABLE); + + g_apt1.baseAddress = APT1; + + /* Clock Settings */ + g_apt1.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt1.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt1.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt1.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt1.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.divInitVal = 0; + g_apt1.waveform.cntInitVal = 0; + g_apt1.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt1.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt1.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt1.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt1.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt1.adcTrg.cntCmpSOCA = 1; /* 1 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt1.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_ZERO; + g_apt1.adcTrg.trgScaleSOCA = 1; + + g_apt1.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + APT1_ProtectInit(); + + HAL_APT_PWMInit(&g_apt1); +} + +static void APT2_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt2, &protectApt); +} + +static void APT2_Init(void) +{ + HAL_CRG_IpEnableSet(APT2_BASE, IP_CLK_ENABLE); + + g_apt2.baseAddress = APT2; + + /* Clock Settings */ + g_apt2.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt2.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt2.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt2.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt2.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.divInitVal = 0; + g_apt2.waveform.cntInitVal = 0; + g_apt2.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt2.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt2.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt2.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt2.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + APT2_ProtectInit(); + + HAL_APT_PWMInit(&g_apt2); +} + +__weak void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + BASE_FUNC_UNUSED(handle); +} + +static void GPIO_Init(void) +{ + HAL_CRG_IpEnableSet(GPIO1_BASE, IP_CLK_ENABLE); + g_gpio1.baseAddress = GPIO1; + + g_gpio1.pins = GPIO_PIN_0; + HAL_GPIO_Init(&g_gpio1); + HAL_GPIO_SetDirection(&g_gpio1, g_gpio1.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio1, g_gpio1.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio1, g_gpio1.pins, GPIO_INT_TYPE_NONE); + + HAL_CRG_IpEnableSet(GPIO2_BASE, IP_CLK_ENABLE); + g_gpio2.baseAddress = GPIO2; + + g_gpio2.pins = GPIO_PIN_3; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_NONE); + + g_gpio2.pins = GPIO_PIN_4; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_INPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_LOW_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_FALL_EDGE); + + HAL_GPIO_RegisterCallBack(&g_gpio2, GPIO_PIN_4, MotorStartStopKeyCallback); + IRQ_Register(IRQ_GPIO2, HAL_GPIO_IrqHandler, &g_gpio2); + IRQ_SetPriority(IRQ_GPIO2, 1); /* set gpio1 interrupt priority to 1, 1~15. 1 is priority value */ + IRQ_EnableN(IRQ_GPIO2); /* gpio interrupt enable */ + + return; +} + +__weak void MotorStatemachineCallBack(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN MotorStatemachineCallBack */ + /* USER CODE END MotorStatemachineCallBack */ +} + +static void TIMER1_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER1_BASE, IP_CLK_ENABLE); /* TIMER1 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER1) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 500; + + g_timer1.baseAddress = TIMER1; + g_timer1.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer1.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer1.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer1.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer1.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer1.interruptEn = BASE_CFG_ENABLE; + g_timer1.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer1.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer1); + IRQ_Register(IRQ_TIMER1, HAL_TIMER_IrqHandler, &g_timer1); + + HAL_TIMER_RegisterCallback(&g_timer1, TIMER_PERIOD_FIN, MotorStatemachineCallBack); + IRQ_SetPriority(IRQ_TIMER1, 2); /* 2 is priority value */ + IRQ_EnableN(IRQ_TIMER1); +} + +static void UART0_Init(void) +{ + HAL_CRG_IpEnableSet(UART0_BASE, IP_CLK_ENABLE); /* UART0 clock enable. */ + g_uart0.baseAddress = UART0; + + g_uart0.baudRate = UART0_BAUD_RATE; + g_uart0.dataLength = UART_DATALENGTH_8BIT; + g_uart0.stopBits = UART_STOPBITS_ONE; + g_uart0.parity = UART_PARITY_NONE; + g_uart0.txMode = UART_MODE_BLOCKING; + g_uart0.rxMode = UART_MODE_BLOCKING; + g_uart0.fifoMode = BASE_CFG_ENABLE; + g_uart0.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart0.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart0.hwFlowCtr = BASE_CFG_DISABLE; + g_uart0.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart0.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart0); +} + +static void IOConfig(void) +{ + SYSCTRL0->SC_SYS_STAT.BIT.update_mode = 0; + SYSCTRL0->SC_SYS_STAT.BIT.update_mode_clear = 1; + /* Config PIN9 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_5_AS_ADC_AIN11); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_5_AS_ADC_AIN11, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_5_AS_ADC_AIN11, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_5_AS_ADC_AIN11, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_5_AS_ADC_AIN11, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN10 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO5_3_AS_ADC_AIN12); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO5_3_AS_ADC_AIN12, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO5_3_AS_ADC_AIN12, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO5_3_AS_ADC_AIN12, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO5_3_AS_ADC_AIN12, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN8 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_6_AS_ADC_AIN10); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_6_AS_ADC_AIN10, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_6_AS_ADC_AIN10, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_6_AS_ADC_AIN10, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_6_AS_ADC_AIN10, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN7 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_7_AS_ADC_AIN9); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_7_AS_ADC_AIN9, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_7_AS_ADC_AIN9, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_7_AS_ADC_AIN9, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_7_AS_ADC_AIN9, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN48 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_6_AS_ACMP_N2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_6_AS_ACMP_N2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_6_AS_ACMP_N2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_6_AS_ACMP_N2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_6_AS_ACMP_N2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN47 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_5_AS_ACMP_P2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_5_AS_ACMP_P2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_5_AS_ACMP_P2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_5_AS_ACMP_P2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_5_AS_ACMP_P2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN1 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_7_AS_ACMP0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_7_AS_ACMP0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_7_AS_ACMP0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_7_AS_ACMP0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_7_AS_ACMP0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN27 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_0_AS_GPIO1_0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_0_AS_GPIO1_0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_0_AS_GPIO1_0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_0_AS_GPIO1_0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_0_AS_GPIO1_0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN35 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_3_AS_GPIO2_3); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_3_AS_GPIO2_3, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_3_AS_GPIO2_3, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_3_AS_GPIO2_3, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_3_AS_GPIO2_3, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN41 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_4_AS_GPIO2_4); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_4_AS_GPIO2_4, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_4_AS_GPIO2_4, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_4_AS_GPIO2_4, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_4_AS_GPIO2_4, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN19 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_0_AS_APT0_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_0_AS_APT0_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_0_AS_APT0_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_0_AS_APT0_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_0_AS_APT0_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN23 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_0_AS_APT0_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_0_AS_APT0_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_0_AS_APT0_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_0_AS_APT0_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_0_AS_APT0_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN20 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_1_AS_APT1_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_1_AS_APT1_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_1_AS_APT1_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_1_AS_APT1_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_1_AS_APT1_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN24 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_1_AS_APT1_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_1_AS_APT1_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_1_AS_APT1_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_1_AS_APT1_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_1_AS_APT1_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN21 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_2_AS_APT2_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_2_AS_APT2_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_2_AS_APT2_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_2_AS_APT2_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_2_AS_APT2_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN25 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_2_AS_APT2_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_2_AS_APT2_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_2_AS_APT2_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_2_AS_APT2_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_2_AS_APT2_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ +} + +static void APT_SyncMasterInit(void) +{ + HAL_APT_MasterSyncInit(&g_apt0, APT_SYNC_OUT_ON_CNTR_ZERO); +} + +static void APT_SyncSlaveInit(void) +{ + APT_SlaveSyncIn aptSlave; + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt1, &aptSlave); + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt2, &aptSlave); + +} + +void SystemInit(void) +{ + IOConfig(); + UART0_Init(); + ACMP0_Init(); + APT0_Init(); + APT1_Init(); + APT2_Init(); + ADC0_Init(); + TIMER1_Init(); + GPIO_Init(); + + APT_SyncMasterInit(); + APT_SyncSlaveInit(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/demo/sample_gpio_key/main.c b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/main.c similarity index 92% rename from vendor/yibaina_3061M/demo/sample_gpio_key/main.c rename to vendor/yibaina_3061M/E7050_Six_Step_Wave/user/main.c index 10f82fbe..b8775e1a 100644 --- a/vendor/yibaina_3061M/demo/sample_gpio_key/main.c +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/main.c @@ -18,17 +18,25 @@ * @file main.c * @author MCU Driver Team * @brief Main program body. + * @date 2025-04-23 14:18:03 */ #include "typedefs.h" #include "feature.h" -#include "gpio_key_sample.h" +#include "mcs_motor_process.h" #include "main.h" /* USER CODE BEGIN 0 */ /* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ /* 建议用户放置头文件 */ /* USER CODE END 0 */ +ACMP_Handle g_acmp0; +TIMER_Handle g_timer1; UART_Handle g_uart0; +APT_Handle g_apt0; +APT_Handle g_apt1; +APT_Handle g_apt2; +ADC_Handle g_adc0; +GPIO_Handle g_gpio1; GPIO_Handle g_gpio2; /* USER CODE BEGIN 1 */ /* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ @@ -39,7 +47,7 @@ int main(void) /* USER CODE BEGIN 2 */ /* 建议用户放置初始化代码或启动代码等 */ /* USER CODE END 2 */ - GPIO_KeySample(); + MotorMainProcess(); /* USER CODE BEGIN 3 */ /* 建议用户放置初始配置代码 */ /* USER CODE END 3 */ diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c new file mode 100644 index 00000000..94898dd5 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c @@ -0,0 +1,562 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.c + * @author MCU Algorithm Team + * @brief This file provides motor application for ECBMCU201MPC board. + * @details BLDC six-step application based on the ECBMCU201MPC board + * 1) Motor model is Gimbal GBM2804H-100T. + * 2) Select the bldc six-step sensorless example in the sample column + of chipConfig and click Generate Code. + * 3) It's power supply must be changed to 12V. + */ + +#include "debug.h" +#include "mcs_assert.h" +#include "mcs_user_config.h" +#include "mcs_status.h" +#include "mcs_carrier.h" +#include "mcs_motor_process.h" + +/*------------------------------- Macro Definition -----------------------------------------------*/ +#define US_PER_MS 1000 +#define APT_FULL_DUTY 1.0f + +/* Motor control handle for bldc */ +static MtrCtrlHandle g_mc; + +static APT_RegStruct* g_aptCp[PHASE_MAX_NUM] = {BRIDGE_CTR_APT_U, BRIDGE_CTR_APT_V, BRIDGE_CTR_APT_W}; + +/** + * @brief Initialzer of system tick. + * @param mtrCtrl Motor control struct handle. + * @retval None. + */ +static void TimerTickInit(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysTickCnt = 0; + mtrCtrl->msTickNum = US_PER_MS / SYSTICK_PERIOD_US; + mtrCtrl->capChargeTickNum = (INV_CAP_CHARGE_MS * US_PER_MS / SYSTICK_PERIOD_US); +} + +/** + * @brief Read the ADC current sampling value of the compressor. + * @param CurrUvw Three-phase current. + * @retval None. + */ +static void ReadBemfUVWMotor(UVWBemf *bemfUVW) +{ + MCS_ASSERT_PARAM(bemfUVW != NULL); + bemfUVW->u = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_U_SOC_NUM)&0xFFF); + bemfUVW->v = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_V_SOC_NUM)&0xFFF); + bemfUVW->w = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_W_SOC_NUM)&0xFFF); +} + +/** + * @brief Init motor control task. + * @retval None. + */ +static void TSK_InitMotor(void) +{ + /* Initialize target speed. */ + g_mc.spdCmdHz = SDP_TARGET_VALUE; + /* zeroPoint = IN_VOLTAGE_BUS / 2.0; 4095/3.3 :ADC value corresponding to 1 V */ + g_mc.zeroPoint = ((((float)IN_VOLTAGE_BUS / 2.0) * VOL_DIVIDER_COEFFICIENT) * 4095 / 3.3); + g_mc.pwmDuty = FORCE_DRAG_MINDUTY; + + /* Sets the number of sample filtering times for zero-crossing sampling. */ + g_mc.sysVar.bemfFilterCnt = FILTER_COUNT; + g_mc.sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + + g_mc.stateMachine = FSM_IDLE; + g_mc.aptMaxcntCmp = g_apt0.waveform.timerPeriod; + + /* Speed management initialization. */ + RMG_Init(&g_mc.spdRmg, CTRL_SYSTICK_PERIOD, USER_SPD_SLOPE); /* Init speed slope */ + TimerTickInit(&g_mc); + + /* Pid control parameter initialization. */ + g_mc.spdPi.kp = SPD_PID_KP; + g_mc.spdPi.ki = SPD_PID_KI; + g_mc.spdPi.ts = SPD_PID_TS; + g_mc.spdPi.upperLimit = APT_DUTYLIMIT_MAX; + g_mc.spdPi.lowerLimit = APT_DUTYLIMIT_MIN; + + /* BLDC six-step control initialization. */ + g_mc.stepCtrl.phaseStep = STEP1; + g_mc.stepCtrl.controlApt.u = &g_apt0; + g_mc.stepCtrl.controlApt.v = &g_apt1; + g_mc.stepCtrl.controlApt.w = &g_apt2; +} + + +/** + * @brief Software Initialization. + * @retval None. + */ +static void InitSoftware(void) +{ + TSK_InitMotor(); + + g_mc.readBemfUVW = ReadBemfUVWMotor; +} + +/** + * @brief Enable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputEnable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Enable three-phase pwm output */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_UNSET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_UNSET; + } +} + +/** + * @brief Disable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputDisable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Disable three-phase pwm output. */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_SET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_SET; + DCL_APT_ForcePWMOutputLow(aptx); + } +} + +/** + * @brief 强制转子对准原位。 + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ForceAlign(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); + MotorPwmOutputEnable(g_aptCp); + mtrCtrl->stepCtrl.phaseStep = STEP6; + SixStepPwm(&mtrCtrl->stepCtrl); + BASE_FUNC_DELAY_MS(100); /* Delay 100 ms waiting for rotor alignment. */ + mtrCtrl->stepCtrl.phaseStep = STEP1; + SixStepPwm(&mtrCtrl->stepCtrl); + BASE_FUNC_DELAY_MS(100); /* Delay 100 ms waiting for rotor alignment. */ + mtrCtrl->sysVar.lastZeroPoint = DCL_SYSTICK_GetTick(); +} + +/** + * @brief Pre-processing of motor status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void MotorStatePerProc(SysStatusReg *statusReg, volatile FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* Get system status */ + if (SysIsError(statusReg)) { + *stateMachine = FSM_FAULT; + } + if (SysGetCmdStop(statusReg)) { + SysCmdStopClr(statusReg); + *stateMachine = FSM_WAIT_STOP; + } +} + +/** + * @brief Open the three-phase lower pipe. + * @param aptAddr Three-phase APT address pointer. + * @param maxDutyCnt Max duty count. + * @retval None. + */ +static void AptTurnOnLowSidePwm(APT_RegStruct **aptAddr, unsigned int maxDutyCnt) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(maxDutyCnt != 0); + unsigned int dutyCnt; + dutyCnt = maxDutyCnt * APT_FULL_DUTY; + /* Open the three-phase lower pipe */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->TC_REFC.BIT.rg_cnt_refc = dutyCnt; + aptx->TC_REFD.BIT.rg_cnt_refd = dutyCnt; + } +} + +/** + * @brief Check systerm cmd start signal. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckSysCmdStart(MtrCtrlHandle *mtrCtrl, APT_RegStruct **aptAddr, SysStatusReg *statusReg, + FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check start cmd */ + if (SysGetCmdStart(statusReg)) { + SysRunningSet(statusReg); + SysCmdStartClr(statusReg); + mtrCtrl->sysTickCnt = 0; + *stateMachine = FSM_CAP_CHARGE; + /* Preparation for charging the bootstrap capacitor. */ + AptTurnOnLowSidePwm(aptAddr, mtrCtrl->aptMaxcntCmp); + /* Out put pwm */ + MotorPwmOutputEnable(aptAddr); + } +} + +/** + * @brief Clear historical values of all controller before start-up. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ClearBeforeStartup(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->aptMaxcntCmp = g_apt0.waveform.timerPeriod; + + /* Clear bemf parameters. */ + mtrCtrl->bemf.u = 0; + mtrCtrl->bemf.v = 0; + mtrCtrl->bemf.w = 0; + + /* Clear tickcnt. */ + mtrCtrl->msTickCnt = 0; + + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + + /* Clear spd parameters. */ + mtrCtrl->spdEstHz = 0; + mtrCtrl->spdRefHz = 0; + + mtrCtrl->stepCtrl.phaseStep = STEP1; + + mtrCtrl->sysTickCnt = 0; + + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + mtrCtrl->sysVar.changePhaseFlag = 0; + mtrCtrl->sysVar.firstEventFilterFlag = 0; + mtrCtrl->sysVar.stepTimeNum = 0; + mtrCtrl->sysVar.stepTimeFilterEnable = 0; + for (int i = 0; i < STEP_MAX_NUM; i++) { + mtrCtrl->sysVar.stepTime[i] = 0; + } + /* RMG CLEAR */ + RMG_Clear(&mtrCtrl->spdRmg); /* Clear the history value of speed slope control */ + /* SPDCTRL CLEAR */ + PID_Clear(&mtrCtrl->spdPi); +} + +/** + * @brief Check bootstrap capacitor charge time. + * @param mtrCtrl The motor control handle. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckBootstrpCapChargeTime(MtrCtrlHandle *mtrCtrl, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + mtrCtrl->sysTickCnt++; + /* check bootstrap capacitor charge time */ + if (mtrCtrl->sysTickCnt == mtrCtrl->capChargeTickNum) { + /* Update Status. */ + *stateMachine = FSM_CLEAR; + } +} + +/** + * @brief Check over current status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckOverCurrentState(SysStatusReg *statusReg, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check systerm error status */ + if (SysIsError(statusReg) == false) { + *stateMachine = FSM_IDLE; + } +} + +/** + * @brief Deceleration control phase before stop. + * @param mtrCtrl The motor control handle. + * @param statusReg Motor Control Status. + * @param targetSpd Deceleration target value. + * @param switchSpd Switch to stop state speed. + * @retval None. + */ +static void DecelerateSpeed(MtrCtrlHandle *mtrCtrl, FsmState *stateMachine, float targetSpd, float switchSpd) +{ + /* Reduce speed before stop. */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, targetSpd); + mtrCtrl->spdPi.error = mtrCtrl->spdRefHz - mtrCtrl->spdEstHz; + /* Speed loop control */ + mtrCtrl->pwmDuty = PI_Exec(&mtrCtrl->spdPi); + if (mtrCtrl->spdRefHz <= switchSpd) { /* Maximum speed for switching to the FSM_STOP state */ + *stateMachine = FSM_STOP; + } +} + +/** + * @brief System timer tick task. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void TSK_SystickIsr(MtrCtrlHandle *mtrCtrl, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + SysStatusReg *statusReg = &mtrCtrl->statusReg; + volatile FsmState *stateMachine = &mtrCtrl->stateMachine; + mtrCtrl->msTickCnt++; + /* Pre-processing of motor status. */ + MotorStatePerProc(statusReg, stateMachine); + /* statemachine */ + switch (*stateMachine) { + case FSM_IDLE: + CheckSysCmdStart(mtrCtrl, aptAddr, statusReg, (FsmState *)stateMachine); + break; + case FSM_CAP_CHARGE: + /* Bootstrap Capacitor Charging Timing */ + CheckBootstrpCapChargeTime(mtrCtrl, (FsmState *)stateMachine); + break; + case FSM_CLEAR: + /* Clearing control parameters. */ + ClearBeforeStartup(mtrCtrl); + /* Rotor alignment. */ + ForceAlign(mtrCtrl); + *stateMachine = FSM_STARTUP; + break; + case FSM_STARTUP: + /* Forced drag. */ + break; + case FSM_RUN: + /* Speed ramp control */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + mtrCtrl->spdPi.error = mtrCtrl->spdRefHz - mtrCtrl->spdEstHz; + /* Speed loop control */ + mtrCtrl->pwmDuty = PI_Exec(&mtrCtrl->spdPi); + break; + case FSM_WAIT_STOP: + /* 5.0f : maximum speed for switching to the FSM_STOP state */ + DecelerateSpeed(mtrCtrl, (FsmState *)stateMachine, 0.0f, 5.0f); + break; + case FSM_STOP: + MotorPwmOutputDisable(aptAddr); + SysRunningClr(statusReg); + *stateMachine = FSM_IDLE; + break; + case FSM_FAULT: + /* Overcurrent state */ + CheckOverCurrentState(statusReg, (FsmState *)stateMachine); + break; + default: + break; + } +} + +/** + * @brief Overcurrent protection. + * @param aptHandle The apt Handle. + * @retval None. + */ +void MotorSysErrCallback(void *aptHandle) +{ + /* Overcurrent protection callback function. */ + BASE_FUNC_UNUSED(aptHandle); + MotorPwmOutputDisable(g_aptCp); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_U], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_V], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_W], APT_OC_COMBINE_EVENT_A1); + /* Status setting error */ + SysErrorSet(&g_mc.statusReg); + DBG_PRINTF("APT error! \r\n"); + HAL_GPIO_SetValue(&g_gpio2, GPIO_PIN_3, GPIO_LOW_LEVEL); +} + +/** + * @brief Motor blockage protection function. + * @retval None. + */ +static void MotorBlockageProtect(void) +{ + unsigned int currentTick = DCL_SYSTICK_GetTick(); /* Get the current tick value. */ + unsigned int intervalTick = (currentTick >= g_mc.sysVar.lastZeroPoint) + ? currentTick - g_mc.sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - g_mc.sysVar.lastZeroPoint + currentTick + 1; + if (intervalTick > SYSTICK_GetCRGHZ()) { + MotorPwmOutputDisable(g_aptCp); + SysErrorSet(&g_mc.statusReg); + g_mc.spdEstHz = 0; + return; + } +} + +/** + * @brief Carrier Interruption. + * @param aptHandle The apt Handle. + * @retval None. + */ +void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + MCS_CarrierProcess(&g_mc); + if (g_mc.stateMachine == FSM_RUN || g_mc.stateMachine == FSM_WAIT_STOP) { + MotorBlockageProtect(); + } + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +/** + * @brief Change phase delay callback function. + * @param handle The TIMER1 Handle. + * @retval None. + */ +void MotorStatemachineCallBack(void *handle) +{ + /* TIMER1CallbackFunction */ + BASE_FUNC_UNUSED(handle); + TSK_SystickIsr(&g_mc, g_aptCp); +} + +/** + * @brief Check Potentiometer Value and adjust speed. + * @param None. + * @retval None. + */ +static void AdjustSpeedFunction(void) +{ + static unsigned int potentiomitorAdcValue = 0; + static float spdCmdHz = 0; + static float spdCmdHzLast = SDP_MAX_VALUE; + HAL_ADC_SoftTrigSample(&ADC_HANDLE, ADC_SOC_NUM9); /* Get the speed adjustment resistance. */ + potentiomitorAdcValue = HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_SOC_NUM9); + /* 4045.0 is adc sample max value of potentiomitor */ + spdCmdHz = (float)potentiomitorAdcValue / 4045.0 * SDP_MAX_VALUE; + if (spdCmdHz < SDP_MIN_VALUE) { /* Speed protection. */ + spdCmdHz = SDP_MIN_VALUE; + } + if (spdCmdHz > SDP_MAX_VALUE) { + spdCmdHz = SDP_MAX_VALUE; + } + float delta = spdCmdHzLast > spdCmdHz ? (spdCmdHzLast - spdCmdHz) : (spdCmdHz - spdCmdHzLast); + /* 1.0 : If the speed fluctuation is less than 1.0Hz, no change is made. */ + if (delta < 1.0) { + return; + } + spdCmdHzLast = spdCmdHz; + g_mc.spdCmdHz = spdCmdHz; +} + +/** + * @brief Config the KEY func. + * @param handle The GPIO handle. + * @retval None. + */ +static KEY_State Key_StateRead(GPIO_Handle *handle) +{ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + BASE_FUNC_DELAY_MS(30); /* delay 30ms for deshake */ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + while (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + } + return KEY_DOWN; + } + } + return KEY_UP; +} + +/** + * @brief Control motor start and stop state by key func. + * @param param The GPIO handle. + * @retval None. + */ +void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + if (Key_StateRead(handle) == KEY_DOWN) { + if (SysIsRunning(&g_mc.statusReg)) { /* stop apt output, motor is off status */ + SysCmdStopSet(&g_mc.statusReg); + } else { /* start apt output, motor is on status */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + SysCmdStartSet(&g_mc.statusReg); + } + } +} + +/** + * @brief User application entry. + * @retval BSP_OK. + */ +int MotorMainProcess(void) +{ + SystemInit(); + /* System Initialization. */ + unsigned int tickNum100Ms = 200; /* 100ms tick */ + static unsigned int tickCnt100Ms = 0; + unsigned int tickNum500Ms = 1000; /* 500ms tick */ + static unsigned int tickCnt500Ms = 0; + + HAL_TIMER_Start(&g_timer1); + /* Disable PWM output before startup. */ + MotorPwmOutputDisable(g_aptCp); + InitSoftware(); + /* Start the PWM clock. */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + + while (true) { + if (g_mc.msTickCnt - tickCnt100Ms >= tickNum100Ms) { + tickCnt100Ms = g_mc.msTickCnt; + /* User Code 100ms Event */ + AdjustSpeedFunction(); + } + if (g_mc.msTickCnt - tickCnt500Ms >= tickNum500Ms) { + if (SysIsError(&g_mc.statusReg) == true) { + break; + } + /* The LED blinks when no status is not error. */ + HAL_GPIO_TogglePin(&SYS_LED_HANDLE, SYS_LED_PIN); + tickCnt500Ms = g_mc.msTickCnt; + } + } + return 0; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h new file mode 100644 index 00000000..a2fdeb2c --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h @@ -0,0 +1,47 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.h + * @author MCU Algorithm Team + * @brief This file provides motor sample functions declaration for ECBMCU201MPC board. + */ +#ifndef McuMagicTag_MCS_MOTOR_PROCESS_H +#define McuMagicTag_MCS_MOTOR_PROCESS_H + +#include "main.h" + +/** + * @brief phase sequence. + */ +typedef enum { + PHASE_U = 0, + PHASE_V, + PHASE_W, + PHASE_MAX_NUM +} MCS_PhaseEnum; + +/** + * @brief key state. + */ +typedef enum { + KEY_DOWN = 0, + KEY_UP = 1, +} KEY_State; + +int MotorMainProcess(void); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h new file mode 100644 index 00000000..f193532a --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECBMCU201MPC app. + */ +#ifndef McuMagicTag_MCS_CONFIG_H +#define McuMagicTag_MCS_CONFIG_H + +#if defined(CHIP_3061MNPICA) || defined(CHIP_3061MNNICA) || defined(CHIP_3061MNPIC8) || defined(CHIP_3061MNNIC8) +#define ADC_U_SOC_NUM ADC_SOC_NUM2 +#define ADC_V_SOC_NUM ADC_SOC_NUM5 +#define ADC_W_SOC_NUM ADC_SOC_NUM6 +#define ADC_SPD_ADJ_SOC_NUM ADC_SOC_NUM9 +#define ADC_HANDLE g_adc0 +#endif + +#if defined (CHIP_3066MNPIRH) || defined (CHIP_3065PNPIRH) || defined (CHIP_3065PNPIRE) || defined (CHIP_3065PNPIRA) +#define ADC_U_SOC_NUM ADC_SOC_NUM3 +#define ADC_V_SOC_NUM ADC_SOC_NUM5 +#define ADC_W_SOC_NUM ADC_SOC_NUM7 +#define ADC_SPD_ADJ_SOC_NUM ADC_SOC_NUM9 + +#define ADC_HANDLE g_adc2 +#endif + +#define APT_PWM_FREQ 12000 /* PWM frequency 12K Hz. */ +#define CTRL_CURR_PERIOD (1.0f / APT_PWM_FREQ) /* carrier ISR period (S) */ +#define CTRL_CURE_PERIOD_US 83 + +#define SYSTICK_PERIOD_US 500u /* systick period. unit : us */ + +#define INV_CAP_CHARGE_MS 3u /* Bootstrap capacitor charge time. unit : ms */ + +#define CTRL_SYSTICK_PERIOD 0.0005f /* systick control period, 500us */ + +#define USER_SPD_SLOPE 60.0f /* slope of velocity change */ + +#define IN_VOLTAGE_BUS 24 /* Motor input voltage */ +#define POLES 14 /* 电机磁极对数 */ +#define MATH_PI 3.14 /* Pi */ +#define MOTOR_K 1.62 /* 转矩系数 */ + +#define RAMP_STP 60 /* Slope of forced draging acceleration */ +#define RAMP_DUTY_PWM 0.5 /* 1.0% */ + +#define FORCE_DRAG_MINDUTY 15 /* APT minimum duty cycle during forced drag */ +#define FORCE_DRAG_MAXDUTY 20 /* APT maximum duty cycle during forced drag */ + +#define DRAG_START_INTERVAL 1000 /* Force drag change phase time */ +#define DRAG_STOP_INTERVAL 400 /* Force drag change phase time */ + +/* Parameters of the motor in the RUN */ +#define FILTER_COUNT 3 /* Filter Times */ +#define PHASE_OFFSET 9000 /* Phase delay due to filtering */ + +#define APT_DUTYLIMIT_MAX 99.9 /* 输出APT的最大占空比 */ +#define APT_DUTYLIMIT_MIN 8.0 /* Minimum duty cycle of the output APT */ + +#define BRIDGE_CTR_APT_U APT0 /* APT address that controls the U phase */ +#define BRIDGE_CTR_APT_V APT1 /* APT address that controls the V phase */ +#define BRIDGE_CTR_APT_W APT2 /* APT address that controls the W phase */ + +#define SDP_MAX_VALUE 58.8 /* 最大相位变化频率 */ +#define SDP_MIN_VALUE 15.0 /* Minimum change phase frequency */ +#define SDP_TARGET_VALUE 58.8 /* 目标相位变化频率 */ + +/* SPD PID Param */ +#define SPD_PID_KP 0.9 /* P parameter of PID control */ +#define SPD_PID_KI 40 /* I parameter of PID control */ +#define SPD_PID_TS 0.0005 /* TS parameter of PID control cycle */ + +#define OP_TO_CL_INTERGRAL 8.0 /* Open-loop switching closed-loop integral term to prevent sudden current change. */ + +#define VOL_DIVIDER_COEFFICIENT 0.09091f /* Division coefficient of the zero-crossing detection sampling circuit */ + +#define SPD_FILTER_FC 30 + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c new file mode 100644 index 00000000..7779fbef --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c @@ -0,0 +1,224 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.c + * @author MCU Algorithm Team + * @brief This file provides carrier interrupt application for motor control. + */ + +#include "mcs_carrier.h" +#include "mcs_user_config.h" +#include "mcs_assert.h" +#include "debug.h" + +#define S_TO_US 1000000 +#define S_TO_SYSTICK 100000000 + +/** + * @brief Sets the duty cycle of the H-bridge APT. + * @param aptHandle APT module handle. + * @param duty PWM duty. Range: 0.1 ~ 99.9. + * @retval None. + */ +void MCS_SetCtrAptDuty(MtrCtrlHandle *mtrCtrl, unsigned int duty) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(duty > 0); + /* Set pwm duty of uvw pahse */ + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.u, duty); + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.v, duty); + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.w, duty); +} + +/** + * @brief Strong drag start. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ForceDragAcc(MtrCtrlHandle *mtrCtrl) +{ + /* Verifying Parameters. */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + unsigned int voltageDValue; + unsigned int dragChangeFreq; + unsigned int timerperiod; + unsigned int freqLast; + unsigned int aptCountsOneUs; + + mtrCtrl->sysVar.accTimeCnt++; + if (mtrCtrl->sysVar.accTimeCnt < mtrCtrl->sysVar.dragChangePhaseTime) { + return; + } + + mtrCtrl->sysVar.accTimeCnt = 0; + /* Step 1: Calculate the voltage difference. */ + voltageDValue = IN_VOLTAGE_BUS * RAMP_DUTY_PWM; + /* Step 2: Calculate the commutation frequency. */ + freqLast = S_TO_US / (mtrCtrl->sysVar.dragChangePhaseTime * CTRL_CURE_PERIOD_US); + dragChangeFreq = voltageDValue * STEP_MAX_NUM * POLES / (MOTOR_K * 2 * MATH_PI) + freqLast; /* 2*PI = 360° */ + /* Step 3: Convert the commutation frequency to the commutation count value. */ + timerperiod = mtrCtrl->stepCtrl.controlApt.u->waveform.timerPeriod * CTRL_CURE_PERIOD_US; + mtrCtrl->sysVar.dragChangePhaseTime = S_TO_US / (timerperiod * dragChangeFreq); + + /* Determine whether the change phase speed has reached the speed of stopping forced drag. */ + if (mtrCtrl->sysVar.dragChangePhaseTime < DRAG_STOP_INTERVAL) { + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_STOP_INTERVAL; + mtrCtrl->sysVar.accTimeCnt = 0; + mtrCtrl->sysVar.bemfFilterCnt = 0; + mtrCtrl->stateMachine = FSM_RUN; + mtrCtrl->sysVar.lastZeroPoint = DCL_SYSTICK_GetTick(); + mtrCtrl->spdPi.integral = OP_TO_CL_INTERGRAL; + } + + /* Shorten the time interval of forced drag change phase. */ + mtrCtrl->pwmDuty += RAMP_DUTY_PWM; + aptCountsOneUs = HAL_CRG_GetIpFreq(APT0_BASE) / S_TO_US; + mtrCtrl->sysVar.waitTime = (mtrCtrl->sysVar.dragChangePhaseTime * CTRL_CURE_PERIOD_US * aptCountsOneUs) >> 1; + /* Change phase time is 2 the waiting time. */ + mtrCtrl->spdRefHz = (float)(HAL_CRG_GetIpFreq(SYSTICK_BASE) / (mtrCtrl->sysVar.waitTime * 2)) / STEP_MAX_NUM; + mtrCtrl->spdEstHz = mtrCtrl->spdRefHz; + mtrCtrl->spdRmg.yLast = mtrCtrl->spdRefHz; + mtrCtrl->stepCtrl.phaseStep = (mtrCtrl->stepCtrl.phaseStep + 1) % STEP_MAX_NUM; + SixStepPwm(&mtrCtrl->stepCtrl); + /* Limiting the PWM Duty Cycle Range. */ + if (mtrCtrl->pwmDuty > FORCE_DRAG_MAXDUTY) { + mtrCtrl->pwmDuty = FORCE_DRAG_MAXDUTY; + } + if (mtrCtrl->pwmDuty < FORCE_DRAG_MINDUTY) { + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + } + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); +} + +/** + * @brief Zero-crossing filter. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void BemfZeroSampleFilter(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysVar.bemfFilterCnt++; + /* Filter the number of samples. */ + if (mtrCtrl->sysVar.bemfFilterCnt >= FILTER_COUNT) { + mtrCtrl->sysVar.bemfFilterCnt = 0; + unsigned int currentTick = DCL_SYSTICK_GetTick(); + if (mtrCtrl->sysVar.firstEventFilterFlag == 0) { + mtrCtrl->sysVar.lastZeroPoint = currentTick; + mtrCtrl->sysVar.changePhaseFlag = 1; + mtrCtrl->sysVar.firstEventFilterFlag = 1; + return; + } + /* Calculate the time interval between the last zero crossing. */ + mtrCtrl->sysVar.stepTime[mtrCtrl->stepCtrl.phaseStep] = currentTick >= mtrCtrl->sysVar.lastZeroPoint + ? currentTick - mtrCtrl->sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - mtrCtrl->sysVar.lastZeroPoint + currentTick + 1; + mtrCtrl->sysVar.stepTimeNum++; + /* Wait time is half the interval. */ + mtrCtrl->sysVar.waitTime = mtrCtrl->sysVar.stepTime[mtrCtrl->stepCtrl.phaseStep] >> 1; + mtrCtrl->sysVar.waitTime -= PHASE_OFFSET; + mtrCtrl->sysVar.lastZeroPoint = currentTick; + /* Update flag. */ + mtrCtrl->sysVar.changePhaseFlag = 1; + } +} + +/** + * @brief Back EMF zero crossing check. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void BemfZeroCheck(MtrCtrlHandle *mtrCtrl) +{ + /* The step corresponds to different conditional judgments. */ + unsigned int bemfCheckTable[STEP_MAX_NUM] = {mtrCtrl->bemf.w < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.v > mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.u < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.w > mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.v < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.u > mtrCtrl->zeroPoint ? 1 : 0}; + + if (bemfCheckTable[mtrCtrl->stepCtrl.phaseStep] == 1) { + BemfZeroSampleFilter(mtrCtrl); + } +} + +/** + * @brief Change phase and speed estimation. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ChangePhase(MtrCtrlHandle *mtrCtrl) +{ + unsigned int currentTick = DCL_SYSTICK_GetTick(); /* Get the current tick value. */ + unsigned int intervalTick = (currentTick >= mtrCtrl->sysVar.lastZeroPoint) + ? currentTick - mtrCtrl->sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - mtrCtrl->sysVar.lastZeroPoint + currentTick + 1; + /* Start average filtering when the number of recorded data reaches six. */ + if (mtrCtrl->sysVar.stepTimeNum >= STEP_MAX_NUM) { + mtrCtrl->sysVar.stepTimeNum = 0; + mtrCtrl->sysVar.stepTimeFilterEnable = 1; + } + /* If the accumulated time is greater than the waiting commutation time, commutation is performed. */ + if (intervalTick > mtrCtrl->sysVar.waitTime) { + if (mtrCtrl->sysVar.stepTimeFilterEnable) { /* 6-step commutation time averaging if filtering is enabled. */ + unsigned int totalTime = mtrCtrl->sysVar.stepTime[STEP1] + mtrCtrl->sysVar.stepTime[STEP2] + + mtrCtrl->sysVar.stepTime[STEP3] + mtrCtrl->sysVar.stepTime[STEP4] + + mtrCtrl->sysVar.stepTime[STEP5] + mtrCtrl->sysVar.stepTime[STEP6]; + mtrCtrl->spdEstHz = (float)HAL_CRG_GetIpFreq(SYSTICK_BASE) / totalTime; + } else { + mtrCtrl->spdEstHz = (float)HAL_CRG_GetIpFreq(SYSTICK_BASE) / (mtrCtrl->sysVar.waitTime << 1) / STEP_MAX_NUM; + } + /* Change phase. */ + mtrCtrl->stepCtrl.phaseStep = (mtrCtrl->stepCtrl.phaseStep + 1) % STEP_MAX_NUM; + SixStepPwm(&mtrCtrl->stepCtrl); + mtrCtrl->sysVar.changePhaseFlag = 0; + } +} + +/** + * @brief Zero-crossing detection and change phase + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void MCS_CarrierProcess(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* Offset value of the calibration value of the three-phase current */ + + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + ForceDragAcc(mtrCtrl); /* Forced drag. */ + break; + + case FSM_RUN: + case FSM_WAIT_STOP: + mtrCtrl->readBemfUVW(&mtrCtrl->bemf); + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); + if (mtrCtrl->sysVar.changePhaseFlag) { + /* Change phase process. */ + ChangePhase(mtrCtrl); + } else { + /* Zero-crossing detection procedure. */ + BemfZeroCheck(mtrCtrl); + } + break; + + default: + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h new file mode 100644 index 00000000..05fc2666 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h @@ -0,0 +1,91 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration for carrier interrupt processing function. + */ +#ifndef McuMagicTag_MCS_CARRIER_H +#define McuMagicTag_MCS_CARRIER_H + +#include "mcs_status.h" +#include "mcs_six_step.h" +#include "mcs_ramp_mgmt.h" +#include "mcs_spd_ctrl.h" +#include "mcs_fsm.h" + +/** + * @brief Three-phase static coordinate frame variable. + */ +typedef struct { + unsigned int u; /**< Component u of the three-phase static coordinate frame variable. */ + unsigned int v; /**< Component v of the three-phase static coordinate frame variable. */ + unsigned int w; /**< Component w of the three-phase static coordinate frame variable. */ +} UVWBemf; + +typedef void (*ReadBemf)(UVWBemf *bemfUVW); + +/** + * @brief The definition of the systematic global variables + */ +typedef struct { + unsigned char changePhaseFlag; /**< Flag indicating that delay change phase is required */ + unsigned char firstEventFilterFlag; /**< First zero-crossing event filtering flag. */ + unsigned int dragChangePhaseTime; /**< Interval for forced drag acceleration */ + unsigned int accTimeCnt; /**< Acceleration time count */ + + unsigned int bemfFilterCnt; /**< Number of sample filtering times for zero-crossing detection. */ + + unsigned int lastZeroPoint; /**< Time of the last zero point */ + unsigned int waitTime; /**< Time to wait for change phase */ + unsigned int stepTime[STEP_MAX_NUM]; /**< Record the time spent on each step */ + unsigned int stepTimeNum; /**< Number of data records in the steptime array. */ + unsigned int stepTimeFilterEnable; +} SysVariable; + +typedef struct { + volatile float spdCmdHz; /**< Set target change phase frequency */ + float spdRefHz; /**< Command values after speed ramp management */ + float spdEstHz; /**< Actual change phase frequency of feedback */ + float pwmDuty; /**< APT duty cycle */ + unsigned int zeroPoint; /**< Adc value of zero point */ + + unsigned short aptMaxcntCmp; /**< Apt Maximum Comparison Count */ + + unsigned short sysTickCnt; /**< System Timer Tick Count */ + unsigned short capChargeTickNum; /**< Bootstrap Capacitor Charge Tick Count */ + unsigned short msTickNum; /**< Number of ticks corresponding to 1 ms */ + volatile unsigned int msTickCnt; /**< Millisecond-level counter, which can be used in 1-ms and 5-ms tasks. */ + + RMG_Handle spdRmg; /**< Ramp management struct for the speed controller input reference */ + PID_Handle spdPi; /**< PI controller struct in the speed controller. */ + + UVWBemf bemf; /**< Three-phase back electromotive force */ + SixStepHandle stepCtrl; /**< Control structure of six-step square wave */ + + SysVariable sysVar; /**< System Variables */ + SysStatusReg statusReg; /**< System Status */ + FsmState stateMachine; /**< BLDC Motor Control State Machine */ + + ReadBemf readBemfUVW; /**< Function interface for obtaining the three-phase electromotive force */ +} MtrCtrlHandle; + +void MCS_CarrierProcess(MtrCtrlHandle *mtrCtrl); + +void MCS_SetCtrAptDuty(MtrCtrlHandle *mtrCtrl, unsigned int duty); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h new file mode 100644 index 00000000..b3c79ea2 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h @@ -0,0 +1,55 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_fsm.h + * @author MCU Algorithm Team + * @brief This file provides the definition of finite statemachine (FSM). + */ + +#ifndef McuMagicTag_MCS_FSM_H +#define McuMagicTag_MCS_FSM_H + +/** + * @brief motor control FSM state define. + * @details motor control FSM state type: + * + FSM_IDLE -- IDLE state, system startup default. + * + FSM_OFFSET_CALIB -- Self calibrate, for ADC init. + * + FSM_CAP_CHARGE -- IPM cap charge. + * + FSM_CLEAR -- Clear before every run. + * + FSM_LOCATE -- Rotor position pre-locate. + * + FSM_STARTUP -- Start up. + * + FSM_SWITCH -- Transition state, control from open to closed loop. + * + FSM_RUN -- Normal running state. + * + FSM_WAIT_STOP -- Wait stopping. + * + FSM_STOP -- Normal stop. + * + FSM_FAULT -- Fault state, waiting for user process. + */ +typedef enum { + FSM_IDLE = 0, + FSM_OFFSET_CALIB, + FSM_CAP_CHARGE, + FSM_CLEAR, + FSM_LOCATE, + FSM_STARTUP, + FSM_SWITCH, + FSM_RUN, + FSM_WAIT_STOP, + FSM_STOP, + FSM_FAULT +} FsmState; + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c new file mode 100644 index 00000000..c86e609c --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c @@ -0,0 +1,126 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_six_step.c + * @author MCU Algorithm Team + * @brief This file provides functions to control the H bridge. + */ + +#include "mcs_assert.h" +#include "mcs_six_step.h" + +/* Mode for disabling or enabling software-based forced output */ +#define APT_PWM_MODE 0 +#define APT_FRC_MODE 1 + +#define PWM_SIGNAL 1 + +#define FRC_LOW APT_OUT_CTRL_ACTION_LOW +#define FRC_HIGH APT_OUT_CTRL_ACTION_HIGH + +/** + * @brief Force PWM output by APT + * @param APTx The APT to use + * @param PwmAout Force to be high or low + * @param PwmAenble PWMA signal software force mode + * @param PwmBout Force to be high or low + * @param PwmBenble PWMB signal software force mode + */ +static void APT_ForcePwmByApt(APT_RegStruct *aptx, APT_Act actMode) +{ + MCS_ASSERT_PARAM(aptx != NULL); + switch (actMode) { + case APT_CHA_PWM_CHB_LOW: + /* Channel A: 0 means not force output enable, channel A output PWM. */ + DCL_APT_DisableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + /* Channel B: 2 means channel B force output LOW due to the A_H_B_L invert. */ + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_HIGH); + break; + case APT_CHA_LOW_CHB_HIGH: + /* Channel A: 1 means force output enable. */ + /* Channel A: 1 means channel A force output LOW. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + /* Channel B: 2 means channel B force output HIGH. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_HIGH); + break; + case APT_CHA_LOW_CHB_LOW: + /* Channel A: 1 means force output enable. */ + /* Channel A: 1 means channel A force output LOW. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + /* Channel B: 1 means channel A force output HIGH due to the A_H_B_L invert. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_LOW); + break; + default: + break; + } +} + +/** + * @brief Output six-step square wave. + * @param handle The SixStepHandle. + * @retval None. + */ +void SixStepPwm(const SixStepHandle *handle) +{ + MCS_ASSERT_PARAM(handle != NULL); + APT_RegStruct *aptU = handle->controlApt.u->baseAddress; /* Get apt u\v\w baseaddress. */ + APT_RegStruct *aptV = handle->controlApt.v->baseAddress; + APT_RegStruct *aptW = handle->controlApt.w->baseAddress; + switch (handle->phaseStep) { + case STEP1: /* U+, V- */ + APT_ForcePwmByApt(aptU, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_HIGH); + break; + case STEP2: /* U+, W- */ + APT_ForcePwmByApt(aptU, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_LOW); + break; + case STEP3: /* V+, W- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptV, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_LOW); + break; + case STEP4: /* V+, U- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_HIGH); + break; + case STEP5: /* W+, U- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptW, APT_CHA_PWM_CHB_LOW); + break; + case STEP6: /* W+, V- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_PWM_CHB_LOW); + break; + default: + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h new file mode 100644 index 00000000..08198c4c --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h @@ -0,0 +1,79 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_six_step.c + * @author MCU Algorithm Team + * @brief The header file contains the following declaration: + * + StepEnum enum definition. + * + PhaseEnum enum definition. + * + UVW_AptReg structure definition. + * + SixStepHandle handle structure definition. + * + AptOutCombination structure definition. + * + Six Step Pwm Function And Six Step Pwm Overlap Function. + */ + +#ifndef MCS_SIX_STEP_H +#define MCS_SIX_STEP_H + +#include "apt.h" + +typedef enum { + STEP1 = 0, + STEP2, + STEP3, + STEP4, + STEP5, + STEP6, + STEP_MAX_NUM +} StepEnum; + +typedef enum { + U = 0, + V, + W, + PHASE_MAX_NUMS +} PhaseEnum; + +typedef enum { + APT_CHA_PWM_CHB_LOW, + APT_CHA_LOW_CHB_HIGH, + APT_CHA_LOW_CHB_LOW +} APT_Act; + +/** + * @brief Three-phase static coordinate frame variable. + */ +typedef struct { + APT_Handle *u; /**< Apt handle for controlling phase U. */ + APT_Handle *v; /**< Apt handle for controlling phase V. */ + APT_Handle *w; /**< Apt handle for controlling phase W. */ +} UVW_AptReg; + +typedef struct { + unsigned char phaseStep; /* Current step. */ + UVW_AptReg controlApt; /* Apt handles for controlling H bridge. */ +} SixStepHandle; + +typedef struct { + unsigned int upperout; /* High tube level */ + unsigned int upperstate; /* High tube state */ + unsigned int lowerout; /* Low tube level */ + unsigned int lowerstate; /* Low tube state */ +} AptOutCombination; + +void SixStepPwm(const SixStepHandle *handle); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h new file mode 100644 index 00000000..d92ed312 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h @@ -0,0 +1,188 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_status.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_STATUS_H +#define McuMagicTag_MCS_STATUS_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "typedefs.h" +#include "mcs_assert.h" + +/* Typedef definitions ------------------------------------------------------------------------- */ +/** + * @brief System status define + */ +typedef union { + unsigned short all; + struct { + unsigned short cmdStart : 1; /**< Indicates that a start system command has been received. */ + unsigned short cmdStop : 1; /**< Indicates that a stop system command has been received. */ + unsigned short isRunning : 1; /**< Indicates that the system is running (enable signal) */ + unsigned short sysError : 1; /**< Indicates that the system reports an error. */ + unsigned short poweron : 1; /**< Indicates that the power-on initialization phase is complete. */ + unsigned short capcharge : 1; /**< Indicates that the bootstrap capacitor charging phase is complete. */ + unsigned short adczero : 1; /**< The current sampling point is reset to zero after power-on. */ + } BIT; +} SysStatusReg; + +/** + * @brief Get status of BIT cmdStart. + * @param sysStatus System status register handle. + * @retval Status of BIT cmdStart. + */ +static inline bool SysGetCmdStart(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.cmdStart == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT cmdStart. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStartSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStart = 1; +} + +/** + * @brief Clear BIT cmdStart. + * @param handle System status register handle. + * @retval None. + */ +static inline void SysCmdStartClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStart = 0; +} + +/** + * @brief Get status of BIT cmdStop. + * @param sysStatus System status register handle. + * @retval Status of BIT cmdStart. + */ +static inline bool SysGetCmdStop(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.cmdStop == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStop = 1; +} + +/** + * @brief Clear BIT cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStop = 0; +} + +/** + * @brief Get status of BIT isRunning. + * @param sysStatus System status register handle. + * @retval Status of BIT isRunning. + */ +static inline bool SysIsRunning(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.isRunning == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.isRunning = 1; +} + +/** + * @brief Clear BIT isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.isRunning = 0; +} + +/** + * @brief Get status of BIT sysError. + * @param sysStatus System status register handle. + * @retval Status of BIT sysError. + */ +static inline bool SysIsError(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.sysError == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.sysError = 1; +} + +/** + * @brief Clear BIT sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.sysError = 0; +} + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/feature.h b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/feature.h new file mode 100644 index 00000000..13108bb3 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/feature.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-23 14:18:03 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define CHIP_3061MNPICA MACRO_ENABLE + +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 30000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_UART_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/main.h b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/main.h new file mode 100644 index 00000000..3d2f9b3b --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/main.h @@ -0,0 +1,91 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.h + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-23 14:18:03 + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_SYSTEM_INIT_H +#define McuMagicTag_SYSTEM_INIT_H + +#include "adc.h" +#include "adc_ex.h" +#include "acmp.h" +#include "acmp_ex.h" +#include "apt.h" +#include "uart.h" +#include "uart_ex.h" +#include "gpio.h" +#include "timer.h" +#include "timer_ex.h" +#include "crg.h" +#include "iocmg.h" +#include "dma.h" +#include "dma_ex.h" +#include "i2c.h" +#include "i2c_ex.h" + +#define IO_SPEED_FAST 0x00U +#define IO_SPEED_SLOW 0x01U + +#define IO_DRV_LEVEL4 0x00U +#define IO_DRV_LEVEL3 0x01U +#define IO_DRV_LEVEL2 0x02U +#define IO_DRV_LEVEL1 0x03U + +#define XTAL_DRV_LEVEL4 0x03U +#define XTAL_DRV_LEVEL3 0x02U +#define XTAL_DRV_LEVEL2 0x01U +#define XTAL_DRV_LEVEL1 0x00U + +#define SYS_LED_PIN GPIO_PIN_3 +#define SYS_LED_HANDLE g_gpio2 +#define GpioStartStop_PIN GPIO_PIN_4 +#define GpioStartStop_HANDLE g_gpio2 + + +extern ACMP_Handle g_acmp0; +extern TIMER_Handle g_timer1; +extern TIMER_Handle g_timer2; +extern UART_Handle g_uart0; +extern APT_Handle g_apt0; +extern APT_Handle g_apt1; +extern APT_Handle g_apt2; +extern ADC_Handle g_adc0; + +extern GPIO_Handle g_gpio1; +extern GPIO_Handle g_gpio2; +extern I2C_Handle g_i2c0; +extern DMA_Handle g_dmac; +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect); +void SystemInit(void); + +void MotorStatemachineCallBack(void *handle); +void TIMER1_DMAOverFlow_InterruptProcess(void *handle); +void MotorCarrierProcessCallback(void *aptHandle); +void MotorSysErrCallback(void *aptHandle); + +void MotorStartStopKeyCallback(void *param); + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_SYSTEM_INIT_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/system_init.c b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/system_init.c new file mode 100644 index 00000000..1f0efc86 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/generatecode/system_init.c @@ -0,0 +1,680 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file system_init.c + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-23 14:18:03 + */ + +#include "main.h" +#include "ioconfig.h" +#include "iocmg_ip.h" + +#define UART0_BAUD_RATE 115200 + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) +{ + CRG_Handle crg; + crg.baseAddress = CRG; + crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC; + crg.pllPreDiv = CRG_PLL_PREDIV_4; + crg.pllFbDiv = 48; /* PLL Multiplier 48 */ + crg.pllPostDiv = CRG_PLL_POSTDIV_2; + crg.coreClkSelect = CRG_CORE_CLK_SELECT_PLL; + crg.handleEx.pllPostDiv2 = CRG_PLL_POSTDIV2_3; + crg.handleEx.clk1MSelect = CRG_1M_CLK_SELECT_HOSC; + crg.handleEx.clk1MDiv = (25 - 1); /* The 1 MHz freq is equal to the input clock frequency / (clk_1m_div + 1). 25 is the div of the clk_1m in CLOCK. */ + + if (HAL_CRG_Init(&crg) != BASE_STATUS_OK) { + return BASE_STATUS_ERROR; + } + *coreClkSelect = crg.coreClkSelect; + return BASE_STATUS_OK; +} + +static void ACMP0_Init(void) +{ + HAL_CRG_IpEnableSet(ACMP0_BASE, IP_CLK_ENABLE); /* ACMP clock bit reset. */ + g_acmp0.baseAddress = ACMP0_BASE; + g_acmp0.inOutConfig.inputNNum = ACMP_INPUT_N_SELECT2; + g_acmp0.inOutConfig.inputPNum = ACMP_INPUT_P_SELECT2; + g_acmp0.inOutConfig.polarity = ACMP_OUT_NOT_INVERT; + g_acmp0.filterCtrl.filterMode = ACMP_FILTER_NONE; + g_acmp0.hysteresisVol = ACMP_HYS_VOL_30MV; + g_acmp0.interruptEn = BASE_CFG_UNSET; + HAL_ACMP_Init(&g_acmp0); +} + +static void ADC0_Init(void) +{ + HAL_CRG_IpEnableSet(ADC0_BASE, IP_CLK_ENABLE); + HAL_CRG_IpClkSelectSet(ADC0_BASE, CRG_ADC_CLK_ASYN_PLL_DIV); + HAL_CRG_IpClkDivSet(ADC0_BASE, CRG_ADC_DIV_1); + + g_adc0.baseAddress = ADC0; + g_adc0.socPriority = ADC_PRIMODE_ALL_ROUND; + + HAL_ADC_Init(&g_adc0); + + SOC_Param socParam = {0}; + socParam.adcInput = ADC_CH_ADCINA11; /* PIN9(ADC AIN11) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM5, &socParam); + + socParam.adcInput = ADC_CH_ADCINA12; /* PIN10(ADC AIN12) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM2, &socParam); + + socParam.adcInput = ADC_CH_ADCINA10; /* PIN8(ADC AIN10) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM6, &socParam); + + socParam.adcInput = ADC_CH_ADCINA9; /* PIN7(ADC AIN9) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM9, &socParam); +} + +__weak void MotorSysErrCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_EVENT_INTERRUPT */ + /* USER CODE END APT0_EVENT_INTERRUPT */ +} + +__weak void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +static void APT0_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_ENABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt0, &protectApt); +} + +static void APT0_Init(void) +{ + HAL_CRG_IpEnableSet(APT0_BASE, IP_CLK_ENABLE); + + g_apt0.baseAddress = APT0; + + /* Clock Settings */ + g_apt0.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt0.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt0.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt0.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt0.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.divInitVal = 0; + g_apt0.waveform.cntInitVal = 0; + g_apt0.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt0.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt0.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt0.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt0.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCA = 6000; /* 6000 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt0.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCA = 1; + + /* ADC Trigger SOCB */ + g_apt0.adcTrg.trgEnSOCB = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCB = 1; + g_apt0.adcTrg.trgSrcSOCB = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCB = 1; + + g_apt0.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + /* Timer Trigger */ + g_apt0.tmrInterrupt.tmrInterruptEn = BASE_CFG_ENABLE; + g_apt0.tmrInterrupt.tmrInterruptSrc = APT_INT_SRC_CNTR_CMPC_UP; + g_apt0.tmrInterrupt.tmrInterruptScale = 1; + + APT0_ProtectInit(); + + HAL_APT_PWMInit(&g_apt0); + HAL_APT_RegisterCallBack(&g_apt0, APT_EVENT_INTERRUPT, MotorSysErrCallback); + IRQ_SetPriority(IRQ_APT0_EVT, 7); /* 7 is priority value */ + IRQ_Register(IRQ_APT0_EVT, HAL_APT_EventIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_EVT); + HAL_APT_RegisterCallBack(&g_apt0, APT_TIMER_INTERRUPT, MotorCarrierProcessCallback); + IRQ_SetPriority(IRQ_APT0_TMR, 6); /* 6 is priority value */ + IRQ_Register(IRQ_APT0_TMR, HAL_APT_TimerIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_TMR); +} + +static void APT1_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt1, &protectApt); +} + +static void APT1_Init(void) +{ + HAL_CRG_IpEnableSet(APT1_BASE, IP_CLK_ENABLE); + + g_apt1.baseAddress = APT1; + + /* Clock Settings */ + g_apt1.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt1.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt1.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt1.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt1.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.divInitVal = 0; + g_apt1.waveform.cntInitVal = 0; + g_apt1.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt1.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt1.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt1.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt1.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt1.adcTrg.cntCmpSOCA = 1; /* 1 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt1.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_ZERO; + g_apt1.adcTrg.trgScaleSOCA = 1; + + g_apt1.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + APT1_ProtectInit(); + + HAL_APT_PWMInit(&g_apt1); +} + +static void APT2_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt2, &protectApt); +} + +static void APT2_Init(void) +{ + HAL_CRG_IpEnableSet(APT2_BASE, IP_CLK_ENABLE); + + g_apt2.baseAddress = APT2; + + /* Clock Settings */ + g_apt2.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt2.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt2.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt2.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt2.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.divInitVal = 0; + g_apt2.waveform.cntInitVal = 0; + g_apt2.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt2.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt2.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt2.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt2.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + APT2_ProtectInit(); + + HAL_APT_PWMInit(&g_apt2); +} + +__weak void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + BASE_FUNC_UNUSED(handle); +} + +static void GPIO_Init(void) +{ + HAL_CRG_IpEnableSet(GPIO1_BASE, IP_CLK_ENABLE); + g_gpio1.baseAddress = GPIO1; + + g_gpio1.pins = GPIO_PIN_0; + HAL_GPIO_Init(&g_gpio1); + HAL_GPIO_SetDirection(&g_gpio1, g_gpio1.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio1, g_gpio1.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio1, g_gpio1.pins, GPIO_INT_TYPE_NONE); + + HAL_CRG_IpEnableSet(GPIO2_BASE, IP_CLK_ENABLE); + g_gpio2.baseAddress = GPIO2; + + g_gpio2.pins = GPIO_PIN_3; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_NONE); + + g_gpio2.pins = GPIO_PIN_4; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_INPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_LOW_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_FALL_EDGE); + + HAL_GPIO_RegisterCallBack(&g_gpio2, GPIO_PIN_4, MotorStartStopKeyCallback); + IRQ_Register(IRQ_GPIO2, HAL_GPIO_IrqHandler, &g_gpio2); + IRQ_SetPriority(IRQ_GPIO2, 1); /* set gpio1 interrupt priority to 1, 1~15. 1 is priority value */ + IRQ_EnableN(IRQ_GPIO2); /* gpio interrupt enable */ + + g_gpio2.pins = GPIO_PIN_2; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_INPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_NONE); + + return; +} + +__weak void MotorStatemachineCallBack(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN MotorStatemachineCallBack */ + /* USER CODE END MotorStatemachineCallBack */ +} + +static void TIMER1_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER1_BASE, IP_CLK_ENABLE); /* TIMER1 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER1) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 500; + + g_timer1.baseAddress = TIMER1; + g_timer1.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer1.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer1.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer1.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer1.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer1.interruptEn = BASE_CFG_ENABLE; + g_timer1.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer1.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer1); + IRQ_Register(IRQ_TIMER1, HAL_TIMER_IrqHandler, &g_timer1); + + HAL_TIMER_RegisterCallback(&g_timer1, TIMER_PERIOD_FIN, MotorStatemachineCallBack); + IRQ_SetPriority(IRQ_TIMER1, 2); /* 2 is priority value */ + IRQ_EnableN(IRQ_TIMER1); +} + + +__weak void TIMER2_InterruptProcess(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN TIMER2_InterruptProcess */ + /* USER CODE END TIMER2_InterruptProcess */ +} + +static void TIMER2_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER2_BASE, IP_CLK_ENABLE); /* TIMER2 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER2) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 100; + + g_timer2.baseAddress = TIMER2; + g_timer2.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer2.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer2.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer2.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer2.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer2.interruptEn = BASE_CFG_ENABLE; + g_timer2.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer2.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer2); + IRQ_Register(IRQ_TIMER2, HAL_TIMER_IrqHandler, &g_timer2); + + HAL_TIMER_RegisterCallback(&g_timer2, TIMER_PERIOD_FIN, TIMER2_InterruptProcess); + IRQ_SetPriority(IRQ_TIMER2, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_TIMER2); +} + +static void UART0_Init(void) +{ + HAL_CRG_IpEnableSet(UART0_BASE, IP_CLK_ENABLE); /* UART0 clock enable. */ + g_uart0.baseAddress = UART0; + + g_uart0.baudRate = UART0_BAUD_RATE; + g_uart0.dataLength = UART_DATALENGTH_8BIT; + g_uart0.stopBits = UART_STOPBITS_ONE; + g_uart0.parity = UART_PARITY_NONE; + g_uart0.txMode = UART_MODE_BLOCKING; + g_uart0.rxMode = UART_MODE_BLOCKING; + g_uart0.fifoMode = BASE_CFG_ENABLE; + g_uart0.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart0.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart0.hwFlowCtr = BASE_CFG_DISABLE; + g_uart0.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart0.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart0); +} +__weak void I2C0TxCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN I2C0TxCallback */ + /* USER CODE END I2C0TxCallback */ +} + +__weak void I2C0RxCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN I2C0RxCallback */ + /* USER CODE END I2C0RxCallback */ +} + +__weak void I2C0ErrorCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN I2C0ErrorCallback */ + /* USER CODE END I2C0ErrorCallback */ +} + +static void I2C0_Init(void) +{ + HAL_CRG_IpEnableSet(I2C0_BASE, IP_CLK_ENABLE); /* I2C0 clock enable. */ + g_i2c0.baseAddress = I2C0; + + g_i2c0.functionMode = I2C_MODE_SELECT_MASTER_ONLY; + g_i2c0.addrMode = I2C_7_BITS; + g_i2c0.sdaHoldTime = 10; /* 10 is sda Hold Time */ + g_i2c0.freq = 400000; /* freqence is 400000 */ + g_i2c0.transferBuff = NULL; + g_i2c0.ignoreAckFlag = BASE_CFG_DISABLE; + g_i2c0.handleEx.spikeFilterTime = 0; + g_i2c0.handleEx.sdaDelayTime = 0; + g_i2c0.timeout = 10000; /* 10000 is time out */ + g_i2c0.state = I2C_STATE_RESET; + g_i2c0.rxWaterMark = 1; /* 1 is Rx Threshold configuration */ + g_i2c0.txWaterMark = 12; /* 12 is Tx Threshold configuration */ + g_i2c0.dmaHandle = &g_dmac; + g_i2c0.txDmaCh = DMA_CHANNEL_ONE; + g_i2c0.rxDmaCh = DMA_CHANNEL_ZERO; + HAL_I2C_Init(&g_i2c0); + HAL_I2C_RegisterCallback(&g_i2c0, I2C_MASTER_TX_COMPLETE_CB_ID, I2C0TxCallback); + HAL_I2C_RegisterCallback(&g_i2c0, I2C_MASTER_RX_COMPLETE_CB_ID, I2C0RxCallback); + HAL_I2C_RegisterCallback(&g_i2c0, I2C_ERROR_CB_ID, I2C0ErrorCallback); +} +static void DMA_Channel0Init(void *handle) +{ + DMA_ChannelParam dma_param; + dma_param.direction = DMA_PERIPH_TO_MEMORY_BY_DMAC; + dma_param.srcAddrInc = DMA_ADDR_UNALTERED; + dma_param.destAddrInc = DMA_ADDR_INCREASE; + dma_param.srcPeriph = DMA_REQUEST_I2C0_RX; + dma_param.destPeriph = DMA_REQUEST_MEM; + dma_param.srcWidth = DMA_TRANSWIDTH_BYTE; + dma_param.destWidth = DMA_TRANSWIDTH_BYTE; + dma_param.srcBurst = DMA_BURST_LENGTH_1; + dma_param.destBurst = DMA_BURST_LENGTH_1; + dma_param.pHandle = handle; + HAL_DMA_InitChannel(&g_dmac, &dma_param, DMA_CHANNEL_ZERO); +} +static void DMA_Channel1Init(void *handle) +{ + DMA_ChannelParam dma_param; + dma_param.direction = DMA_MEMORY_TO_PERIPH_BY_DMAC; + dma_param.srcAddrInc = DMA_ADDR_INCREASE; + dma_param.destAddrInc = DMA_ADDR_UNALTERED; + dma_param.srcPeriph = DMA_REQUEST_MEM; + dma_param.destPeriph = DMA_REQUEST_I2C0_TX; + dma_param.srcWidth = DMA_TRANSWIDTH_WORD; + dma_param.destWidth = DMA_TRANSWIDTH_WORD; + dma_param.srcBurst = DMA_BURST_LENGTH_1; + dma_param.destBurst = DMA_BURST_LENGTH_1; + dma_param.pHandle = handle; + HAL_DMA_InitChannel(&g_dmac, &dma_param, DMA_CHANNEL_ONE); +} + +static void DMA_Init(void) +{ + HAL_CRG_IpEnableSet(DMA_BASE, IP_CLK_ENABLE); + g_dmac.baseAddress = DMA; + IRQ_Register(IRQ_DMA_TC, HAL_DMA_IrqHandlerTc, &g_dmac); + IRQ_Register(IRQ_DMA_ERR, HAL_DMA_IrqHandlerError, &g_dmac); + IRQ_EnableN(IRQ_DMA_TC); + IRQ_EnableN(IRQ_DMA_ERR); + HAL_DMA_Init(&g_dmac); + + DMA_Channel0Init((void *)(&g_i2c0)); + HAL_DMA_SetChannelPriorityEx(&g_dmac, DMA_CHANNEL_ZERO, DMA_PRIORITY_HIGHEST); + DMA_Channel1Init((void *)(&g_i2c0)); + HAL_DMA_SetChannelPriorityEx(&g_dmac, DMA_CHANNEL_ONE, DMA_PRIORITY_HIGHEST); +} +static void IOConfig(void) +{ + SYSCTRL0->SC_SYS_STAT.BIT.update_mode = 0; + SYSCTRL0->SC_SYS_STAT.BIT.update_mode_clear = 1; + /* Config PIN9 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_5_AS_ADC_AIN11); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_5_AS_ADC_AIN11, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_5_AS_ADC_AIN11, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_5_AS_ADC_AIN11, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_5_AS_ADC_AIN11, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN10 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO5_3_AS_ADC_AIN12); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO5_3_AS_ADC_AIN12, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO5_3_AS_ADC_AIN12, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO5_3_AS_ADC_AIN12, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO5_3_AS_ADC_AIN12, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN8 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_6_AS_ADC_AIN10); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_6_AS_ADC_AIN10, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_6_AS_ADC_AIN10, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_6_AS_ADC_AIN10, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_6_AS_ADC_AIN10, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN7 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_7_AS_ADC_AIN9); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_7_AS_ADC_AIN9, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_7_AS_ADC_AIN9, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_7_AS_ADC_AIN9, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_7_AS_ADC_AIN9, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN48 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_6_AS_ACMP_N2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_6_AS_ACMP_N2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_6_AS_ACMP_N2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_6_AS_ACMP_N2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_6_AS_ACMP_N2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN47 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_5_AS_ACMP_P2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_5_AS_ACMP_P2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_5_AS_ACMP_P2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_5_AS_ACMP_P2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_5_AS_ACMP_P2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN1 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_7_AS_ACMP0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_7_AS_ACMP0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_7_AS_ACMP0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_7_AS_ACMP0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_7_AS_ACMP0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN27 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_0_AS_GPIO1_0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_0_AS_GPIO1_0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_0_AS_GPIO1_0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_0_AS_GPIO1_0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_0_AS_GPIO1_0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN35 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_3_AS_GPIO2_3); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_3_AS_GPIO2_3, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_3_AS_GPIO2_3, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_3_AS_GPIO2_3, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_3_AS_GPIO2_3, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN41 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_4_AS_GPIO2_4); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_4_AS_GPIO2_4, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_4_AS_GPIO2_4, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_4_AS_GPIO2_4, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_4_AS_GPIO2_4, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN19 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_0_AS_APT0_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_0_AS_APT0_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_0_AS_APT0_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_0_AS_APT0_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_0_AS_APT0_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN23 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_0_AS_APT0_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_0_AS_APT0_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_0_AS_APT0_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_0_AS_APT0_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_0_AS_APT0_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN20 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_1_AS_APT1_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_1_AS_APT1_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_1_AS_APT1_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_1_AS_APT1_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_1_AS_APT1_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN24 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_1_AS_APT1_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_1_AS_APT1_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_1_AS_APT1_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_1_AS_APT1_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_1_AS_APT1_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN21 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_2_AS_APT2_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_2_AS_APT2_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_2_AS_APT2_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_2_AS_APT2_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_2_AS_APT2_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN25 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_2_AS_APT2_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_2_AS_APT2_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_2_AS_APT2_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_2_AS_APT2_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_2_AS_APT2_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + + /* Config PIN34 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_2_AS_GPIO2_2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_2_AS_GPIO2_2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_2_AS_GPIO2_2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_2_AS_GPIO2_2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_2_AS_GPIO2_2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + + /* Config PIN15 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_5_AS_I2C0_SCL); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_5_AS_I2C0_SCL, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_5_AS_I2C0_SCL, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_5_AS_I2C0_SCL, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_5_AS_I2C0_SCL, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN16 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_3_AS_I2C0_SDA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_3_AS_I2C0_SDA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_3_AS_I2C0_SDA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_3_AS_I2C0_SDA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_3_AS_I2C0_SDA, DRIVER_RATE_2); /* Output signal edge fast/slow */ +} + + +static void APT_SyncMasterInit(void) +{ + HAL_APT_MasterSyncInit(&g_apt0, APT_SYNC_OUT_ON_CNTR_ZERO); +} + +static void APT_SyncSlaveInit(void) +{ + APT_SlaveSyncIn aptSlave; + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt1, &aptSlave); + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt2, &aptSlave); + +} + +void SystemInit(void) +{ + IOConfig(); + UART0_Init(); + ACMP0_Init(); + APT0_Init(); + APT1_Init(); + APT2_Init(); + ADC0_Init(); + TIMER1_Init(); + TIMER2_Init(); + DMA_Init(); + GPIO_Init(); + I2C0_Init(); + APT_SyncMasterInit(); + APT_SyncSlaveInit(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/main.c b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/main.c new file mode 100644 index 00000000..1d7563b9 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/main.c @@ -0,0 +1,72 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + * @date 2025-04-23 14:18:03 + */ + +#include "typedefs.h" +#include "feature.h" +#include "mcs_motor_process.h" +#include "main.h" +#include "ifd.h" +#include "oled.h" +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ +/* USER CODE END 0 */ +ACMP_Handle g_acmp0; +TIMER_Handle g_timer1; +UART_Handle g_uart0; +APT_Handle g_apt0; +APT_Handle g_apt1; +APT_Handle g_apt2; +ADC_Handle g_adc0; +GPIO_Handle g_gpio1; +GPIO_Handle g_gpio2; +TIMER_Handle g_timer2; +I2C_Handle g_i2c0; +DMA_Handle g_dmac; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ +/* USER CODE END 1 */ + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + /* USER CODE END 2 */ + MotorMainProcess(); + /* USER CODE BEGIN 3 */ + /* 建议用户放置初始配置代码 */ + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + /* 建议用户放置周期性执行代码 */ + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/IR/ifd.c b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/IR/ifd.c new file mode 100644 index 00000000..accec7f1 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/IR/ifd.c @@ -0,0 +1,287 @@ +#include "ifd.h" +#include "debug.h" +#include "main.h" +#include "string.h" +#define RESET 0 +#define SET 1 + +#define IR_IN HAL_GPIO_GetPinValue(&g_gpio2, GPIO_PIN_2) // PA1 红外接收DQ引脚 +unsigned char ir_code[4]; // 解码值保存变量 +unsigned char ir_decode_ok_flag = RESET; // 解码成功标志位 +unsigned char key_data=0; + + +/* + NEC红外编码: 引导码 + 地址码 + 地址码(取反) + 数据 + 数据(取反) + 引导吗:0.56ms(低电平) + 2.25ms(高电平) + 数据1: 0.56ms(低电平) + 1.12ms(高电平) +*/ +// 红外解码程序,100us定期执行就可以,将该函数放在100us的定时器中即可。 + + + +void Ir_Decode(void) +{ + static unsigned int l_cnt = 0; // 低电平时间计数 + static unsigned int h_cnt = 0; // 高电平时间计数 + static unsigned int l_cnt_save = 0; // 保存低电平时长 + static unsigned int h_cnt_save = 0; // 保存高电平时长 + static unsigned char falling_edge_valid_flag = RESET; // IR电平由高变低标志位 + static unsigned char rcv_sync_ok_flag = RESET; // 同步码接收成功标志位 + static unsigned char bit_value = 0; // 位解码值 + static unsigned char bit_rcv_cnt = 0; // 位接收个数变量 + + + if( RESET == IR_IN ) + { + if( 0 == l_cnt ) // IR由高变低后立马记录上次测得的高电平时长 + { + h_cnt_save = h_cnt; + falling_edge_valid_flag = SET; + } + + + l_cnt ++; + if( l_cnt > 1600 ) // 防止计数溢出 + { + l_cnt = 1600; + } + h_cnt = 0; // 计数清零 + + } + else + { + if( 0 == h_cnt ) // IR由低变高后立马记录上次测得的低电平时长 + { + l_cnt_save = l_cnt; + } + + h_cnt ++; + if( h_cnt > 1600 ) // 防止计数溢出 + { + h_cnt = 1600; + } + + l_cnt = 0; // 计数清零 + + + if(ir_decode_ok_flag == 1) + { + if(h_cnt > 1200) + ir_decode_ok_flag = 2; // 短按 + } + + } + + + if( SET == falling_edge_valid_flag ) + { + falling_edge_valid_flag = RESET; + + /* 位解码 */ + if( ((l_cnt_save >= 3)&&(l_cnt_save <= 9)) && // 560us低电平, 560us高电平 + ((h_cnt_save >= 3)&&(h_cnt_save <= 9)) ) + { + bit_value = 0; + } + else if( ((l_cnt_save >= 3)&&(l_cnt_save <= 9)) && // 560us低电平,1680us高电平 + ((h_cnt_save >= 14)&&(h_cnt_save <= 20)) ) + { + bit_value = 1; + } + else + { + bit_value = 2; + } + + if( SET == rcv_sync_ok_flag ) + { + if((1 == bit_value) || (0 == bit_value) ) + { + if( bit_rcv_cnt < 8 ) + { + ir_code[0] |= (bit_value<< (bit_rcv_cnt%8)); + } + else if( bit_rcv_cnt < 16 ) + { + ir_code[1] |= (bit_value<< (bit_rcv_cnt%8)); + } + else if( bit_rcv_cnt < 24 ) + { + ir_code[2] |= (bit_value<< (bit_rcv_cnt%8)); + } + else if( bit_rcv_cnt < 32 ) + { + ir_code[3] |= (bit_value<< (bit_rcv_cnt%8)); + } + + if( bit_rcv_cnt >= 31 ) + { + ir_decode_ok_flag = SET; + rcv_sync_ok_flag = RESET; + } + + bit_rcv_cnt ++; + } + else + { + rcv_sync_ok_flag = RESET; // 位接收错误,重新解码 + } + } + + if( ((l_cnt_save >= 87)&&(l_cnt_save <= 93)) && + ((h_cnt_save >= 42)&&(h_cnt_save <= 48)) ) // 同步码,9ms低电平,4.5ms高电平 + { + rcv_sync_ok_flag = SET; + bit_rcv_cnt = 0; + ir_code[0] = 0; + ir_code[1] = 0; + ir_code[2] = 0; + ir_code[3] = 0; + } + else if(((l_cnt_save >= 87)&&(l_cnt_save <= 93)) && + ((h_cnt_save >= 20)&&(h_cnt_save <= 25)) ) + { + DBG_PRINTF("repeate code\r\n"); + ir_decode_ok_flag = 3; //长按 + } + + } +} + +//获取红外键值 +/* +KEY_OK = 28, +KEY_UP =24, +KEY_DOWN = 82 +KEY_LEFT = 8, +KEY_RIGHT =90, +KEY_1 = 69, +KEY_2 = 70, +KEY_3 = 71, +KEY_4 = 68, +KEY_5 = 64, +KEY_6 = 67, +KEY_7 = 7, +KEY_8 = 21, +KEY_9 =9, +KEY_0 = 25, +KEY_*=22 +KEY_# =13 +*/ + +unsigned char Remote_Scan(void) +{ + unsigned char key_value = 0; + + + // 校验地址码和命令码 + if((ir_code[0] == (unsigned char)~ir_code[1]) && + (ir_code[2] == (unsigned char)~ir_code[3])) + { + key_value = ir_code[2]; // 返回键值 + memset(ir_code, 0, sizeof(ir_code)); + } + + // switch(key_value) + // { + // case 69: + // DBG_PRINTF("1\r\n");//显示1 + // break; + + // case 70: + // DBG_PRINTF("2\r\n");//显示2 + // break; + + // case 71: + // DBG_PRINTF("3\r\n");//显示3 + // break; + + // case 68: + // DBG_PRINTF("4\r\n");//显示4 + // break; + + // case 64: + // DBG_PRINTF("5\r\n");//显示5 + // break; + + // case 67: + // DBG_PRINTF("6\r\n");//显示6 + // break; + + // case 7: + // DBG_PRINTF("7\r\n");//显示7 + // break; + + // case 21: + // DBG_PRINTF("8\r\n");//显示8 + // break; + + // case 9: + // DBG_PRINTF("9\r\n");//显示9 + // break; + + // case 25: + // DBG_PRINTF("0\r\n");//显示0 + // break; + + // case 22: + // DBG_PRINTF("*\r\n");//显示ASCII字符 + // break; + + // case 13: + // DBG_PRINTF("#\r\n");//显示ASCII字符 + // break; + + // case 24: + + // DBG_PRINTF("UP\r\n");//显示ASCII字符 + // break; + + // case 8: + // DBG_PRINTF("LEFT\r\n");//显示ASCII字符 + // break; + + // case 82: + + // DBG_PRINTF("DOWN\r\n");//显示ASCII字符 + + // break; + + // case 90: + // DBG_PRINTF("RIGHT\r\n");//显示ASCII字符 + // break; + + // case 28: + // DBG_PRINTF("OK\r\n"); + // break; + + // default: + + // break; + // } + + + return key_value; +} + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/IR/ifd.h b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/IR/ifd.h new file mode 100644 index 00000000..6559a3bf --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/IR/ifd.h @@ -0,0 +1,36 @@ +#ifndef __IR_H +#define __IR_H + + + +extern unsigned char ir_code[4]; +extern unsigned char key_data; +void Ir_Decode(void); + +unsigned char Remote_Scan(void); + + + + + + + + + + + + + + + + +#endif + + + + + + + + + diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c new file mode 100644 index 00000000..4fd139fc --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c @@ -0,0 +1,781 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.c + * @author MCU Algorithm Team + * @brief This file provides motor application for ECBMCU201MPC board. + * @details BLDC six-step application based on the ECBMCU201MPC board + * 1) Motor model is Gimbal GBM2804H-100T. + * 2) Select the bldc six-step sensorless example in the sample column + of chipConfig and click Generate Code. + * 3) It's power supply must be changed to 12V. + */ + +#include "debug.h" +#include "mcs_assert.h" +#include "mcs_user_config.h" +#include "mcs_status.h" +#include "mcs_carrier.h" +#include "mcs_motor_process.h" +#include "ifd.h" +#include "oled.h" +/*------------------------------- Macro Definition -----------------------------------------------*/ +#define US_PER_MS 1000 +#define APT_FULL_DUTY 1.0f + +/* Motor control handle for bldc */ +static MtrCtrlHandle g_mc; + +static APT_RegStruct* g_aptCp[PHASE_MAX_NUM] = {BRIDGE_CTR_APT_U, BRIDGE_CTR_APT_V, BRIDGE_CTR_APT_W}; + +static oled_display_flag=0; + +/** + * @brief Initialzer of system tick. + * @param mtrCtrl Motor control struct handle. + * @retval None. + */ +static void TimerTickInit(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysTickCnt = 0; + mtrCtrl->msTickNum = US_PER_MS / SYSTICK_PERIOD_US; + mtrCtrl->capChargeTickNum = (INV_CAP_CHARGE_MS * US_PER_MS / SYSTICK_PERIOD_US); +} + +/** + * @brief Read the ADC current sampling value of the compressor. + * @param CurrUvw Three-phase current. + * @retval None. + */ +static void ReadBemfUVWMotor(UVWBemf *bemfUVW) +{ + MCS_ASSERT_PARAM(bemfUVW != NULL); + bemfUVW->u = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_U_SOC_NUM)&0xFFF); + bemfUVW->v = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_V_SOC_NUM)&0xFFF); + bemfUVW->w = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_W_SOC_NUM)&0xFFF); +} + +/** + * @brief Init motor control task. + * @retval None. + */ +static void TSK_InitMotor(void) +{ + /* Initialize target speed. */ + g_mc.spdCmdHz = SDP_TARGET_VALUE; + /* zeroPoint = IN_VOLTAGE_BUS / 2.0; 4095/3.3 :ADC value corresponding to 1 V */ + g_mc.zeroPoint = ((((float)IN_VOLTAGE_BUS / 2.0) * VOL_DIVIDER_COEFFICIENT) * 4095 / 3.3); + g_mc.pwmDuty = FORCE_DRAG_MINDUTY; + + /* Sets the number of sample filtering times for zero-crossing sampling. */ + g_mc.sysVar.bemfFilterCnt = FILTER_COUNT; + g_mc.sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + + g_mc.stateMachine = FSM_IDLE; + g_mc.aptMaxcntCmp = g_apt0.waveform.timerPeriod; + + /* Speed management initialization. */ + RMG_Init(&g_mc.spdRmg, CTRL_SYSTICK_PERIOD, USER_SPD_SLOPE); /* Init speed slope */ + TimerTickInit(&g_mc); + + /* Pid control parameter initialization. */ + g_mc.spdPi.kp = SPD_PID_KP; + g_mc.spdPi.ki = SPD_PID_KI; + g_mc.spdPi.ts = SPD_PID_TS; + g_mc.spdPi.upperLimit = APT_DUTYLIMIT_MAX; + g_mc.spdPi.lowerLimit = APT_DUTYLIMIT_MIN; + + /* BLDC six-step control initialization. */ + g_mc.stepCtrl.phaseStep = STEP1; + g_mc.stepCtrl.controlApt.u = &g_apt0; + g_mc.stepCtrl.controlApt.v = &g_apt1; + g_mc.stepCtrl.controlApt.w = &g_apt2; +} + + +/** + * @brief Software Initialization. + * @retval None. + */ +static void InitSoftware(void) +{ + TSK_InitMotor(); + + g_mc.readBemfUVW = ReadBemfUVWMotor; +} + +/** + * @brief Enable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputEnable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Enable three-phase pwm output */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_UNSET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_UNSET; + } +} + +/** + * @brief Disable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputDisable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Disable three-phase pwm output. */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_SET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_SET; + DCL_APT_ForcePWMOutputLow(aptx); + } +} + +/** + * @brief 强制转子对准原位。 + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ForceAlign(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); + MotorPwmOutputEnable(g_aptCp); + mtrCtrl->stepCtrl.phaseStep = STEP6; + SixStepPwm(&mtrCtrl->stepCtrl); + BASE_FUNC_DELAY_MS(100); /* Delay 100 ms waiting for rotor alignment. */ + mtrCtrl->stepCtrl.phaseStep = STEP1; + SixStepPwm(&mtrCtrl->stepCtrl); + BASE_FUNC_DELAY_MS(100); /* Delay 100 ms waiting for rotor alignment. */ + mtrCtrl->sysVar.lastZeroPoint = DCL_SYSTICK_GetTick(); +} + +/** + * @brief Pre-processing of motor status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void MotorStatePerProc(SysStatusReg *statusReg, volatile FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* Get system status */ + if (SysIsError(statusReg)) { + *stateMachine = FSM_FAULT; + } + if (SysGetCmdStop(statusReg)) { + SysCmdStopClr(statusReg); + *stateMachine = FSM_WAIT_STOP; + } +} + +/** + * @brief Open the three-phase lower pipe. + * @param aptAddr Three-phase APT address pointer. + * @param maxDutyCnt Max duty count. + * @retval None. + */ +static void AptTurnOnLowSidePwm(APT_RegStruct **aptAddr, unsigned int maxDutyCnt) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(maxDutyCnt != 0); + unsigned int dutyCnt; + dutyCnt = maxDutyCnt * APT_FULL_DUTY; + /* Open the three-phase lower pipe */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->TC_REFC.BIT.rg_cnt_refc = dutyCnt; + aptx->TC_REFD.BIT.rg_cnt_refd = dutyCnt; + } +} + +/** + * @brief Check systerm cmd start signal. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckSysCmdStart(MtrCtrlHandle *mtrCtrl, APT_RegStruct **aptAddr, SysStatusReg *statusReg, + FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check start cmd */ + if (SysGetCmdStart(statusReg)) { + SysRunningSet(statusReg); + SysCmdStartClr(statusReg); + mtrCtrl->sysTickCnt = 0; + *stateMachine = FSM_CAP_CHARGE; + /* Preparation for charging the bootstrap capacitor. */ + AptTurnOnLowSidePwm(aptAddr, mtrCtrl->aptMaxcntCmp); + /* Out put pwm */ + MotorPwmOutputEnable(aptAddr); + } +} + +/** + * @brief Clear historical values of all controller before start-up. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ClearBeforeStartup(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->aptMaxcntCmp = g_apt0.waveform.timerPeriod; + + /* Clear bemf parameters. */ + mtrCtrl->bemf.u = 0; + mtrCtrl->bemf.v = 0; + mtrCtrl->bemf.w = 0; + + /* Clear tickcnt. */ + mtrCtrl->msTickCnt = 0; + + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + + /* Clear spd parameters. */ + mtrCtrl->spdEstHz = 0; + mtrCtrl->spdRefHz = 0; + + mtrCtrl->stepCtrl.phaseStep = STEP1; + + mtrCtrl->sysTickCnt = 0; + + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + mtrCtrl->sysVar.changePhaseFlag = 0; + mtrCtrl->sysVar.firstEventFilterFlag = 0; + mtrCtrl->sysVar.stepTimeNum = 0; + mtrCtrl->sysVar.stepTimeFilterEnable = 0; + for (int i = 0; i < STEP_MAX_NUM; i++) { + mtrCtrl->sysVar.stepTime[i] = 0; + } + /* RMG CLEAR */ + RMG_Clear(&mtrCtrl->spdRmg); /* Clear the history value of speed slope control */ + /* SPDCTRL CLEAR */ + PID_Clear(&mtrCtrl->spdPi); +} + +/** + * @brief Check bootstrap capacitor charge time. + * @param mtrCtrl The motor control handle. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckBootstrpCapChargeTime(MtrCtrlHandle *mtrCtrl, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + mtrCtrl->sysTickCnt++; + /* check bootstrap capacitor charge time */ + if (mtrCtrl->sysTickCnt == mtrCtrl->capChargeTickNum) { + /* Update Status. */ + *stateMachine = FSM_CLEAR; + } +} + +/** + * @brief Check over current status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckOverCurrentState(SysStatusReg *statusReg, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check systerm error status */ + if (SysIsError(statusReg) == false) { + *stateMachine = FSM_IDLE; + } +} + +/** + * @brief Deceleration control phase before stop. + * @param mtrCtrl The motor control handle. + * @param statusReg Motor Control Status. + * @param targetSpd Deceleration target value. + * @param switchSpd Switch to stop state speed. + * @retval None. + */ +static void DecelerateSpeed(MtrCtrlHandle *mtrCtrl, FsmState *stateMachine, float targetSpd, float switchSpd) +{ + /* Reduce speed before stop. */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, targetSpd); + mtrCtrl->spdPi.error = mtrCtrl->spdRefHz - mtrCtrl->spdEstHz; + /* Speed loop control */ + mtrCtrl->pwmDuty = PI_Exec(&mtrCtrl->spdPi); + if (mtrCtrl->spdRefHz <= switchSpd) { /* Maximum speed for switching to the FSM_STOP state */ + *stateMachine = FSM_STOP; + } +} + +/** + * @brief System timer tick task. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void TSK_SystickIsr(MtrCtrlHandle *mtrCtrl, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + SysStatusReg *statusReg = &mtrCtrl->statusReg; + volatile FsmState *stateMachine = &mtrCtrl->stateMachine; + mtrCtrl->msTickCnt++; + /* Pre-processing of motor status. */ + MotorStatePerProc(statusReg, stateMachine); + /* statemachine */ + switch (*stateMachine) { + case FSM_IDLE: + CheckSysCmdStart(mtrCtrl, aptAddr, statusReg, (FsmState *)stateMachine); + break; + case FSM_CAP_CHARGE: + /* Bootstrap Capacitor Charging Timing */ + CheckBootstrpCapChargeTime(mtrCtrl, (FsmState *)stateMachine); + break; + case FSM_CLEAR: + /* Clearing control parameters. */ + ClearBeforeStartup(mtrCtrl); + /* Rotor alignment. */ + ForceAlign(mtrCtrl); + *stateMachine = FSM_STARTUP; + break; + case FSM_STARTUP: + /* Forced drag. */ + break; + case FSM_RUN: + /* Speed ramp control */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + mtrCtrl->spdPi.error = mtrCtrl->spdRefHz - mtrCtrl->spdEstHz; + /* Speed loop control */ + mtrCtrl->pwmDuty = PI_Exec(&mtrCtrl->spdPi); + break; + case FSM_WAIT_STOP: + /* 5.0f : maximum speed for switching to the FSM_STOP state */ + DecelerateSpeed(mtrCtrl, (FsmState *)stateMachine, 0.0f, 5.0f); + break; + case FSM_STOP: + MotorPwmOutputDisable(aptAddr); + SysRunningClr(statusReg); + *stateMachine = FSM_IDLE; + break; + case FSM_FAULT: + /* Overcurrent state */ + CheckOverCurrentState(statusReg, (FsmState *)stateMachine); + break; + default: + break; + } +} + +/** + * @brief Overcurrent protection. + * @param aptHandle The apt Handle. + * @retval None. + */ +void MotorSysErrCallback(void *aptHandle) +{ + /* Overcurrent protection callback function. */ + BASE_FUNC_UNUSED(aptHandle); + MotorPwmOutputDisable(g_aptCp); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_U], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_V], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_W], APT_OC_COMBINE_EVENT_A1); + /* Status setting error */ + SysErrorSet(&g_mc.statusReg); + DBG_PRINTF("APT error! \r\n"); + HAL_GPIO_SetValue(&g_gpio2, GPIO_PIN_3, GPIO_LOW_LEVEL); +} + +/** + * @brief Motor blockage protection function. + * @retval None. + */ +static void MotorBlockageProtect(void) +{ + unsigned int currentTick = DCL_SYSTICK_GetTick(); /* Get the current tick value. */ + unsigned int intervalTick = (currentTick >= g_mc.sysVar.lastZeroPoint) + ? currentTick - g_mc.sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - g_mc.sysVar.lastZeroPoint + currentTick + 1; + if (intervalTick > SYSTICK_GetCRGHZ()) { + MotorPwmOutputDisable(g_aptCp); + SysErrorSet(&g_mc.statusReg); + g_mc.spdEstHz = 0; + return; + } +} + +/** + * @brief Carrier Interruption. + * @param aptHandle The apt Handle. + * @retval None. + */ +void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + MCS_CarrierProcess(&g_mc); + if (g_mc.stateMachine == FSM_RUN || g_mc.stateMachine == FSM_WAIT_STOP) { + MotorBlockageProtect(); + } + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +/** + * @brief Change phase delay callback function. + * @param handle The TIMER1 Handle. + * @retval None. + */ +void MotorStatemachineCallBack(void *handle) +{ + /* TIMER1CallbackFunction */ + BASE_FUNC_UNUSED(handle); + TSK_SystickIsr(&g_mc, g_aptCp); +} + +/** + * @brief 显数据 + * @param None + * @retval + */ +void DispSomething(void) +{ + + switch(oled_display_flag) + { + case 1: + + OLED_displaystr(0,0,"档位:1"); + oled_display_flag=0; + break; + + case 2: + + OLED_displaystr(0,0,"档位:2"); + oled_display_flag=0; + break; + + case 3: + + + OLED_displaystr(0,0,"档位:3"); + oled_display_flag=0; + break; + + case 4: + + + OLED_displaystr(0,0,"档位:4"); + oled_display_flag=0; + break; + + case 5: + + OLED_displaystr(0,0,"档位:5"); + oled_display_flag=0; + + break; + case 6: + + g_mc.spdEstHz=0; + + break; + default: + + break; + + } + + OLED_ShowNum(2,6,g_mc.spdEstHz*60/POLES,3,16);//显示速度 +} + +/** + * @brief 100us解码红外模块 + * @param None. + * @retval None. + */ + +void TIMER2_InterruptProcess(void *handle) +{ + BASE_FUNC_UNUSED(handle); + + static float spdCmdHz = 0; + static float spdCmdHzLast = SDP_MAX_VALUE; + + Ir_Decode();//解码 + key_data=Remote_Scan(); + + switch(key_data) + { + case 69: + spdCmdHz=15;//显示1 + DBG_PRINTF("1\r\n");//显示1 + + oled_display_flag=1; + break; + + case 70: + spdCmdHz=25;//显示2 + DBG_PRINTF("2\r\n"); + oled_display_flag=2; + break; + + case 71: + spdCmdHz=35;//显示3 + DBG_PRINTF("3\r\n"); + oled_display_flag=3; + break; + + case 68: + spdCmdHz=45;;//显示4 + DBG_PRINTF("4\r\n"); + oled_display_flag=4; + break; + + case 64: + spdCmdHz=55;;//显示5 + DBG_PRINTF("5\r\n"); + oled_display_flag=5; + + break; + + case 67: + DBG_PRINTF("6\r\n");//显示6 + break; + + case 7: + DBG_PRINTF("7\r\n");//显示7 + break; + + case 21: + DBG_PRINTF("8\r\n");//显示8 + break; + + case 9: + DBG_PRINTF("9\r\n");//显示9 + break; + + case 25: + DBG_PRINTF("0\r\n");//显示0 + break; + + case 22: + DBG_PRINTF("*\r\n");//显示ASCII字符 + break; + + case 13: + DBG_PRINTF("#\r\n");//显示ASCII字符 + break; + + case 24: + spdCmdHz+=5; + DBG_PRINTF("UP\r\n");//显示ASCII字符 + break; + + case 8: + + DBG_PRINTF("LEFT\r\n");//显示ASCII字符 + break; + + case 82: + spdCmdHz-=5; + DBG_PRINTF("DOWN\r\n");//显示ASCII字符 + + break; + + case 90: + DBG_PRINTF("RIGHT\r\n");//显示ASCII字符 + break; + + case 28: //OK + if (SysIsRunning(&g_mc.statusReg)) { /* stop apt output, motor is off status */ + SysCmdStopSet(&g_mc.statusReg); + oled_display_flag=6; + } else { /* start apt output, motor is on status */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + SysCmdStartSet(&g_mc.statusReg); + oled_display_flag=0; + } + + + DBG_PRINTF("OK\r\n"); + break; + + default: + + break; + + + // OLED_ShowNum(2,6,g_mc.spdEstHz,3,16); + } + + + + if (spdCmdHz < SDP_MIN_VALUE) { /* Speed protection. */ + spdCmdHz = SDP_MIN_VALUE; + } + if (spdCmdHz > SDP_MAX_VALUE) { + spdCmdHz = SDP_MAX_VALUE; + } + float delta = spdCmdHzLast > spdCmdHz ? (spdCmdHzLast - spdCmdHz) : (spdCmdHz - spdCmdHzLast); + /* 1.0 : If the speed fluctuation is less than 1.0Hz, no change is made. */ + if (delta < 1.0) { + return; + } + spdCmdHzLast = spdCmdHz; + g_mc.spdCmdHz = spdCmdHz; + + + +} + + +/** + * @brief Check Potentiometer Value and adjust speed. + * @param None. + * @retval None. + */ +static void AdjustSpeedFunction(void) +{ + static unsigned int potentiomitorAdcValue = 0; + static float spdCmdHz = 0; + static float spdCmdHzLast = SDP_MAX_VALUE; + HAL_ADC_SoftTrigSample(&ADC_HANDLE, ADC_SOC_NUM9); /* Get the speed adjustment resistance. */ + potentiomitorAdcValue = HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_SOC_NUM9); + + + /* 4045.0 is adc sample max value of potentiomitor */ + spdCmdHz = (float)potentiomitorAdcValue / 4045.0 * SDP_MAX_VALUE; + + if (spdCmdHz < SDP_MIN_VALUE) { /* Speed protection. */ + spdCmdHz = SDP_MIN_VALUE; + } + if (spdCmdHz > SDP_MAX_VALUE) { + spdCmdHz = SDP_MAX_VALUE; + } + float delta = spdCmdHzLast > spdCmdHz ? (spdCmdHzLast - spdCmdHz) : (spdCmdHz - spdCmdHzLast); + /* 1.0 : If the speed fluctuation is less than 1.0Hz, no change is made. */ + if (delta < 1.0) { + return; + } + spdCmdHzLast = spdCmdHz; + g_mc.spdCmdHz = spdCmdHz; +} + +/** + * @brief Config the KEY func. + * @param handle The GPIO handle. + * @retval None. + */ +static KEY_State Key_StateRead(GPIO_Handle *handle) +{ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + BASE_FUNC_DELAY_MS(30); /* delay 30ms for deshake */ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + while (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + } + return KEY_DOWN; + } + } + return KEY_UP; +} + +/** + * @brief Control motor start and stop state by key func. + * @param param The GPIO handle. + * @retval None. + */ +void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + if (Key_StateRead(handle) == KEY_DOWN) { + if (SysIsRunning(&g_mc.statusReg)) { /* stop apt output, motor is off status */ + SysCmdStopSet(&g_mc.statusReg); + } else { /* start apt output, motor is on status */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + SysCmdStartSet(&g_mc.statusReg); + } + } +} + +/** + * @brief User application entry. + * @retval BSP_OK. + */ +int MotorMainProcess(void) +{ + SystemInit(); + OLED_Init(); + /* System Initialization. */ + unsigned int tickNum100Ms = 200; /* 100ms tick */ + static unsigned int tickCnt100Ms = 0; + unsigned int tickNum500Ms = 1000; /* 500ms tick */ + static unsigned int tickCnt500Ms = 0; + + HAL_TIMER_Start(&g_timer1); + HAL_TIMER_Start(&g_timer2); + /* Disable PWM output before startup. */ + MotorPwmOutputDisable(g_aptCp); + InitSoftware(); + /* Start the PWM clock. */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + + OLED_displaystr(0,0,"档位:1"); + OLED_displaystr(0,3,"电机速度:"); + OLED_displaystr(64,6,"RPM"); + + + while (true) { + if (g_mc.msTickCnt - tickCnt100Ms >= tickNum100Ms) { + tickCnt100Ms = g_mc.msTickCnt; + /* User Code 100ms Event */ + AdjustSpeedFunction(); + + } + if (g_mc.msTickCnt - tickCnt500Ms >= tickNum500Ms) { + if (SysIsError(&g_mc.statusReg) == true) { + break; + } + /* The LED blinks when no status is not error. */ + HAL_GPIO_TogglePin(&SYS_LED_HANDLE, SYS_LED_PIN); + + tickCnt500Ms = g_mc.msTickCnt; + + DispSomething();//显示OLED数据 + + + } + + + + } + return 0; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h new file mode 100644 index 00000000..a2fdeb2c --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h @@ -0,0 +1,47 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.h + * @author MCU Algorithm Team + * @brief This file provides motor sample functions declaration for ECBMCU201MPC board. + */ +#ifndef McuMagicTag_MCS_MOTOR_PROCESS_H +#define McuMagicTag_MCS_MOTOR_PROCESS_H + +#include "main.h" + +/** + * @brief phase sequence. + */ +typedef enum { + PHASE_U = 0, + PHASE_V, + PHASE_W, + PHASE_MAX_NUM +} MCS_PhaseEnum; + +/** + * @brief key state. + */ +typedef enum { + KEY_DOWN = 0, + KEY_UP = 1, +} KEY_State; + +int MotorMainProcess(void); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h new file mode 100644 index 00000000..f193532a --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECBMCU201MPC app. + */ +#ifndef McuMagicTag_MCS_CONFIG_H +#define McuMagicTag_MCS_CONFIG_H + +#if defined(CHIP_3061MNPICA) || defined(CHIP_3061MNNICA) || defined(CHIP_3061MNPIC8) || defined(CHIP_3061MNNIC8) +#define ADC_U_SOC_NUM ADC_SOC_NUM2 +#define ADC_V_SOC_NUM ADC_SOC_NUM5 +#define ADC_W_SOC_NUM ADC_SOC_NUM6 +#define ADC_SPD_ADJ_SOC_NUM ADC_SOC_NUM9 +#define ADC_HANDLE g_adc0 +#endif + +#if defined (CHIP_3066MNPIRH) || defined (CHIP_3065PNPIRH) || defined (CHIP_3065PNPIRE) || defined (CHIP_3065PNPIRA) +#define ADC_U_SOC_NUM ADC_SOC_NUM3 +#define ADC_V_SOC_NUM ADC_SOC_NUM5 +#define ADC_W_SOC_NUM ADC_SOC_NUM7 +#define ADC_SPD_ADJ_SOC_NUM ADC_SOC_NUM9 + +#define ADC_HANDLE g_adc2 +#endif + +#define APT_PWM_FREQ 12000 /* PWM frequency 12K Hz. */ +#define CTRL_CURR_PERIOD (1.0f / APT_PWM_FREQ) /* carrier ISR period (S) */ +#define CTRL_CURE_PERIOD_US 83 + +#define SYSTICK_PERIOD_US 500u /* systick period. unit : us */ + +#define INV_CAP_CHARGE_MS 3u /* Bootstrap capacitor charge time. unit : ms */ + +#define CTRL_SYSTICK_PERIOD 0.0005f /* systick control period, 500us */ + +#define USER_SPD_SLOPE 60.0f /* slope of velocity change */ + +#define IN_VOLTAGE_BUS 24 /* Motor input voltage */ +#define POLES 14 /* 电机磁极对数 */ +#define MATH_PI 3.14 /* Pi */ +#define MOTOR_K 1.62 /* 转矩系数 */ + +#define RAMP_STP 60 /* Slope of forced draging acceleration */ +#define RAMP_DUTY_PWM 0.5 /* 1.0% */ + +#define FORCE_DRAG_MINDUTY 15 /* APT minimum duty cycle during forced drag */ +#define FORCE_DRAG_MAXDUTY 20 /* APT maximum duty cycle during forced drag */ + +#define DRAG_START_INTERVAL 1000 /* Force drag change phase time */ +#define DRAG_STOP_INTERVAL 400 /* Force drag change phase time */ + +/* Parameters of the motor in the RUN */ +#define FILTER_COUNT 3 /* Filter Times */ +#define PHASE_OFFSET 9000 /* Phase delay due to filtering */ + +#define APT_DUTYLIMIT_MAX 99.9 /* 输出APT的最大占空比 */ +#define APT_DUTYLIMIT_MIN 8.0 /* Minimum duty cycle of the output APT */ + +#define BRIDGE_CTR_APT_U APT0 /* APT address that controls the U phase */ +#define BRIDGE_CTR_APT_V APT1 /* APT address that controls the V phase */ +#define BRIDGE_CTR_APT_W APT2 /* APT address that controls the W phase */ + +#define SDP_MAX_VALUE 58.8 /* 最大相位变化频率 */ +#define SDP_MIN_VALUE 15.0 /* Minimum change phase frequency */ +#define SDP_TARGET_VALUE 58.8 /* 目标相位变化频率 */ + +/* SPD PID Param */ +#define SPD_PID_KP 0.9 /* P parameter of PID control */ +#define SPD_PID_KI 40 /* I parameter of PID control */ +#define SPD_PID_TS 0.0005 /* TS parameter of PID control cycle */ + +#define OP_TO_CL_INTERGRAL 8.0 /* Open-loop switching closed-loop integral term to prevent sudden current change. */ + +#define VOL_DIVIDER_COEFFICIENT 0.09091f /* Division coefficient of the zero-crossing detection sampling circuit */ + +#define SPD_FILTER_FC 30 + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c new file mode 100644 index 00000000..7779fbef --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c @@ -0,0 +1,224 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.c + * @author MCU Algorithm Team + * @brief This file provides carrier interrupt application for motor control. + */ + +#include "mcs_carrier.h" +#include "mcs_user_config.h" +#include "mcs_assert.h" +#include "debug.h" + +#define S_TO_US 1000000 +#define S_TO_SYSTICK 100000000 + +/** + * @brief Sets the duty cycle of the H-bridge APT. + * @param aptHandle APT module handle. + * @param duty PWM duty. Range: 0.1 ~ 99.9. + * @retval None. + */ +void MCS_SetCtrAptDuty(MtrCtrlHandle *mtrCtrl, unsigned int duty) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(duty > 0); + /* Set pwm duty of uvw pahse */ + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.u, duty); + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.v, duty); + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.w, duty); +} + +/** + * @brief Strong drag start. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ForceDragAcc(MtrCtrlHandle *mtrCtrl) +{ + /* Verifying Parameters. */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + unsigned int voltageDValue; + unsigned int dragChangeFreq; + unsigned int timerperiod; + unsigned int freqLast; + unsigned int aptCountsOneUs; + + mtrCtrl->sysVar.accTimeCnt++; + if (mtrCtrl->sysVar.accTimeCnt < mtrCtrl->sysVar.dragChangePhaseTime) { + return; + } + + mtrCtrl->sysVar.accTimeCnt = 0; + /* Step 1: Calculate the voltage difference. */ + voltageDValue = IN_VOLTAGE_BUS * RAMP_DUTY_PWM; + /* Step 2: Calculate the commutation frequency. */ + freqLast = S_TO_US / (mtrCtrl->sysVar.dragChangePhaseTime * CTRL_CURE_PERIOD_US); + dragChangeFreq = voltageDValue * STEP_MAX_NUM * POLES / (MOTOR_K * 2 * MATH_PI) + freqLast; /* 2*PI = 360° */ + /* Step 3: Convert the commutation frequency to the commutation count value. */ + timerperiod = mtrCtrl->stepCtrl.controlApt.u->waveform.timerPeriod * CTRL_CURE_PERIOD_US; + mtrCtrl->sysVar.dragChangePhaseTime = S_TO_US / (timerperiod * dragChangeFreq); + + /* Determine whether the change phase speed has reached the speed of stopping forced drag. */ + if (mtrCtrl->sysVar.dragChangePhaseTime < DRAG_STOP_INTERVAL) { + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_STOP_INTERVAL; + mtrCtrl->sysVar.accTimeCnt = 0; + mtrCtrl->sysVar.bemfFilterCnt = 0; + mtrCtrl->stateMachine = FSM_RUN; + mtrCtrl->sysVar.lastZeroPoint = DCL_SYSTICK_GetTick(); + mtrCtrl->spdPi.integral = OP_TO_CL_INTERGRAL; + } + + /* Shorten the time interval of forced drag change phase. */ + mtrCtrl->pwmDuty += RAMP_DUTY_PWM; + aptCountsOneUs = HAL_CRG_GetIpFreq(APT0_BASE) / S_TO_US; + mtrCtrl->sysVar.waitTime = (mtrCtrl->sysVar.dragChangePhaseTime * CTRL_CURE_PERIOD_US * aptCountsOneUs) >> 1; + /* Change phase time is 2 the waiting time. */ + mtrCtrl->spdRefHz = (float)(HAL_CRG_GetIpFreq(SYSTICK_BASE) / (mtrCtrl->sysVar.waitTime * 2)) / STEP_MAX_NUM; + mtrCtrl->spdEstHz = mtrCtrl->spdRefHz; + mtrCtrl->spdRmg.yLast = mtrCtrl->spdRefHz; + mtrCtrl->stepCtrl.phaseStep = (mtrCtrl->stepCtrl.phaseStep + 1) % STEP_MAX_NUM; + SixStepPwm(&mtrCtrl->stepCtrl); + /* Limiting the PWM Duty Cycle Range. */ + if (mtrCtrl->pwmDuty > FORCE_DRAG_MAXDUTY) { + mtrCtrl->pwmDuty = FORCE_DRAG_MAXDUTY; + } + if (mtrCtrl->pwmDuty < FORCE_DRAG_MINDUTY) { + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + } + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); +} + +/** + * @brief Zero-crossing filter. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void BemfZeroSampleFilter(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysVar.bemfFilterCnt++; + /* Filter the number of samples. */ + if (mtrCtrl->sysVar.bemfFilterCnt >= FILTER_COUNT) { + mtrCtrl->sysVar.bemfFilterCnt = 0; + unsigned int currentTick = DCL_SYSTICK_GetTick(); + if (mtrCtrl->sysVar.firstEventFilterFlag == 0) { + mtrCtrl->sysVar.lastZeroPoint = currentTick; + mtrCtrl->sysVar.changePhaseFlag = 1; + mtrCtrl->sysVar.firstEventFilterFlag = 1; + return; + } + /* Calculate the time interval between the last zero crossing. */ + mtrCtrl->sysVar.stepTime[mtrCtrl->stepCtrl.phaseStep] = currentTick >= mtrCtrl->sysVar.lastZeroPoint + ? currentTick - mtrCtrl->sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - mtrCtrl->sysVar.lastZeroPoint + currentTick + 1; + mtrCtrl->sysVar.stepTimeNum++; + /* Wait time is half the interval. */ + mtrCtrl->sysVar.waitTime = mtrCtrl->sysVar.stepTime[mtrCtrl->stepCtrl.phaseStep] >> 1; + mtrCtrl->sysVar.waitTime -= PHASE_OFFSET; + mtrCtrl->sysVar.lastZeroPoint = currentTick; + /* Update flag. */ + mtrCtrl->sysVar.changePhaseFlag = 1; + } +} + +/** + * @brief Back EMF zero crossing check. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void BemfZeroCheck(MtrCtrlHandle *mtrCtrl) +{ + /* The step corresponds to different conditional judgments. */ + unsigned int bemfCheckTable[STEP_MAX_NUM] = {mtrCtrl->bemf.w < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.v > mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.u < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.w > mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.v < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.u > mtrCtrl->zeroPoint ? 1 : 0}; + + if (bemfCheckTable[mtrCtrl->stepCtrl.phaseStep] == 1) { + BemfZeroSampleFilter(mtrCtrl); + } +} + +/** + * @brief Change phase and speed estimation. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ChangePhase(MtrCtrlHandle *mtrCtrl) +{ + unsigned int currentTick = DCL_SYSTICK_GetTick(); /* Get the current tick value. */ + unsigned int intervalTick = (currentTick >= mtrCtrl->sysVar.lastZeroPoint) + ? currentTick - mtrCtrl->sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - mtrCtrl->sysVar.lastZeroPoint + currentTick + 1; + /* Start average filtering when the number of recorded data reaches six. */ + if (mtrCtrl->sysVar.stepTimeNum >= STEP_MAX_NUM) { + mtrCtrl->sysVar.stepTimeNum = 0; + mtrCtrl->sysVar.stepTimeFilterEnable = 1; + } + /* If the accumulated time is greater than the waiting commutation time, commutation is performed. */ + if (intervalTick > mtrCtrl->sysVar.waitTime) { + if (mtrCtrl->sysVar.stepTimeFilterEnable) { /* 6-step commutation time averaging if filtering is enabled. */ + unsigned int totalTime = mtrCtrl->sysVar.stepTime[STEP1] + mtrCtrl->sysVar.stepTime[STEP2] + + mtrCtrl->sysVar.stepTime[STEP3] + mtrCtrl->sysVar.stepTime[STEP4] + + mtrCtrl->sysVar.stepTime[STEP5] + mtrCtrl->sysVar.stepTime[STEP6]; + mtrCtrl->spdEstHz = (float)HAL_CRG_GetIpFreq(SYSTICK_BASE) / totalTime; + } else { + mtrCtrl->spdEstHz = (float)HAL_CRG_GetIpFreq(SYSTICK_BASE) / (mtrCtrl->sysVar.waitTime << 1) / STEP_MAX_NUM; + } + /* Change phase. */ + mtrCtrl->stepCtrl.phaseStep = (mtrCtrl->stepCtrl.phaseStep + 1) % STEP_MAX_NUM; + SixStepPwm(&mtrCtrl->stepCtrl); + mtrCtrl->sysVar.changePhaseFlag = 0; + } +} + +/** + * @brief Zero-crossing detection and change phase + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void MCS_CarrierProcess(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* Offset value of the calibration value of the three-phase current */ + + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + ForceDragAcc(mtrCtrl); /* Forced drag. */ + break; + + case FSM_RUN: + case FSM_WAIT_STOP: + mtrCtrl->readBemfUVW(&mtrCtrl->bemf); + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); + if (mtrCtrl->sysVar.changePhaseFlag) { + /* Change phase process. */ + ChangePhase(mtrCtrl); + } else { + /* Zero-crossing detection procedure. */ + BemfZeroCheck(mtrCtrl); + } + break; + + default: + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h new file mode 100644 index 00000000..05fc2666 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h @@ -0,0 +1,91 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration for carrier interrupt processing function. + */ +#ifndef McuMagicTag_MCS_CARRIER_H +#define McuMagicTag_MCS_CARRIER_H + +#include "mcs_status.h" +#include "mcs_six_step.h" +#include "mcs_ramp_mgmt.h" +#include "mcs_spd_ctrl.h" +#include "mcs_fsm.h" + +/** + * @brief Three-phase static coordinate frame variable. + */ +typedef struct { + unsigned int u; /**< Component u of the three-phase static coordinate frame variable. */ + unsigned int v; /**< Component v of the three-phase static coordinate frame variable. */ + unsigned int w; /**< Component w of the three-phase static coordinate frame variable. */ +} UVWBemf; + +typedef void (*ReadBemf)(UVWBemf *bemfUVW); + +/** + * @brief The definition of the systematic global variables + */ +typedef struct { + unsigned char changePhaseFlag; /**< Flag indicating that delay change phase is required */ + unsigned char firstEventFilterFlag; /**< First zero-crossing event filtering flag. */ + unsigned int dragChangePhaseTime; /**< Interval for forced drag acceleration */ + unsigned int accTimeCnt; /**< Acceleration time count */ + + unsigned int bemfFilterCnt; /**< Number of sample filtering times for zero-crossing detection. */ + + unsigned int lastZeroPoint; /**< Time of the last zero point */ + unsigned int waitTime; /**< Time to wait for change phase */ + unsigned int stepTime[STEP_MAX_NUM]; /**< Record the time spent on each step */ + unsigned int stepTimeNum; /**< Number of data records in the steptime array. */ + unsigned int stepTimeFilterEnable; +} SysVariable; + +typedef struct { + volatile float spdCmdHz; /**< Set target change phase frequency */ + float spdRefHz; /**< Command values after speed ramp management */ + float spdEstHz; /**< Actual change phase frequency of feedback */ + float pwmDuty; /**< APT duty cycle */ + unsigned int zeroPoint; /**< Adc value of zero point */ + + unsigned short aptMaxcntCmp; /**< Apt Maximum Comparison Count */ + + unsigned short sysTickCnt; /**< System Timer Tick Count */ + unsigned short capChargeTickNum; /**< Bootstrap Capacitor Charge Tick Count */ + unsigned short msTickNum; /**< Number of ticks corresponding to 1 ms */ + volatile unsigned int msTickCnt; /**< Millisecond-level counter, which can be used in 1-ms and 5-ms tasks. */ + + RMG_Handle spdRmg; /**< Ramp management struct for the speed controller input reference */ + PID_Handle spdPi; /**< PI controller struct in the speed controller. */ + + UVWBemf bemf; /**< Three-phase back electromotive force */ + SixStepHandle stepCtrl; /**< Control structure of six-step square wave */ + + SysVariable sysVar; /**< System Variables */ + SysStatusReg statusReg; /**< System Status */ + FsmState stateMachine; /**< BLDC Motor Control State Machine */ + + ReadBemf readBemfUVW; /**< Function interface for obtaining the three-phase electromotive force */ +} MtrCtrlHandle; + +void MCS_CarrierProcess(MtrCtrlHandle *mtrCtrl); + +void MCS_SetCtrAptDuty(MtrCtrlHandle *mtrCtrl, unsigned int duty); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h new file mode 100644 index 00000000..b3c79ea2 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h @@ -0,0 +1,55 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_fsm.h + * @author MCU Algorithm Team + * @brief This file provides the definition of finite statemachine (FSM). + */ + +#ifndef McuMagicTag_MCS_FSM_H +#define McuMagicTag_MCS_FSM_H + +/** + * @brief motor control FSM state define. + * @details motor control FSM state type: + * + FSM_IDLE -- IDLE state, system startup default. + * + FSM_OFFSET_CALIB -- Self calibrate, for ADC init. + * + FSM_CAP_CHARGE -- IPM cap charge. + * + FSM_CLEAR -- Clear before every run. + * + FSM_LOCATE -- Rotor position pre-locate. + * + FSM_STARTUP -- Start up. + * + FSM_SWITCH -- Transition state, control from open to closed loop. + * + FSM_RUN -- Normal running state. + * + FSM_WAIT_STOP -- Wait stopping. + * + FSM_STOP -- Normal stop. + * + FSM_FAULT -- Fault state, waiting for user process. + */ +typedef enum { + FSM_IDLE = 0, + FSM_OFFSET_CALIB, + FSM_CAP_CHARGE, + FSM_CLEAR, + FSM_LOCATE, + FSM_STARTUP, + FSM_SWITCH, + FSM_RUN, + FSM_WAIT_STOP, + FSM_STOP, + FSM_FAULT +} FsmState; + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c new file mode 100644 index 00000000..c86e609c --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c @@ -0,0 +1,126 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_six_step.c + * @author MCU Algorithm Team + * @brief This file provides functions to control the H bridge. + */ + +#include "mcs_assert.h" +#include "mcs_six_step.h" + +/* Mode for disabling or enabling software-based forced output */ +#define APT_PWM_MODE 0 +#define APT_FRC_MODE 1 + +#define PWM_SIGNAL 1 + +#define FRC_LOW APT_OUT_CTRL_ACTION_LOW +#define FRC_HIGH APT_OUT_CTRL_ACTION_HIGH + +/** + * @brief Force PWM output by APT + * @param APTx The APT to use + * @param PwmAout Force to be high or low + * @param PwmAenble PWMA signal software force mode + * @param PwmBout Force to be high or low + * @param PwmBenble PWMB signal software force mode + */ +static void APT_ForcePwmByApt(APT_RegStruct *aptx, APT_Act actMode) +{ + MCS_ASSERT_PARAM(aptx != NULL); + switch (actMode) { + case APT_CHA_PWM_CHB_LOW: + /* Channel A: 0 means not force output enable, channel A output PWM. */ + DCL_APT_DisableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + /* Channel B: 2 means channel B force output LOW due to the A_H_B_L invert. */ + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_HIGH); + break; + case APT_CHA_LOW_CHB_HIGH: + /* Channel A: 1 means force output enable. */ + /* Channel A: 1 means channel A force output LOW. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + /* Channel B: 2 means channel B force output HIGH. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_HIGH); + break; + case APT_CHA_LOW_CHB_LOW: + /* Channel A: 1 means force output enable. */ + /* Channel A: 1 means channel A force output LOW. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + /* Channel B: 1 means channel A force output HIGH due to the A_H_B_L invert. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_LOW); + break; + default: + break; + } +} + +/** + * @brief Output six-step square wave. + * @param handle The SixStepHandle. + * @retval None. + */ +void SixStepPwm(const SixStepHandle *handle) +{ + MCS_ASSERT_PARAM(handle != NULL); + APT_RegStruct *aptU = handle->controlApt.u->baseAddress; /* Get apt u\v\w baseaddress. */ + APT_RegStruct *aptV = handle->controlApt.v->baseAddress; + APT_RegStruct *aptW = handle->controlApt.w->baseAddress; + switch (handle->phaseStep) { + case STEP1: /* U+, V- */ + APT_ForcePwmByApt(aptU, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_HIGH); + break; + case STEP2: /* U+, W- */ + APT_ForcePwmByApt(aptU, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_LOW); + break; + case STEP3: /* V+, W- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptV, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_LOW); + break; + case STEP4: /* V+, U- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_HIGH); + break; + case STEP5: /* W+, U- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptW, APT_CHA_PWM_CHB_LOW); + break; + case STEP6: /* W+, V- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_PWM_CHB_LOW); + break; + default: + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h new file mode 100644 index 00000000..08198c4c --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h @@ -0,0 +1,79 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_six_step.c + * @author MCU Algorithm Team + * @brief The header file contains the following declaration: + * + StepEnum enum definition. + * + PhaseEnum enum definition. + * + UVW_AptReg structure definition. + * + SixStepHandle handle structure definition. + * + AptOutCombination structure definition. + * + Six Step Pwm Function And Six Step Pwm Overlap Function. + */ + +#ifndef MCS_SIX_STEP_H +#define MCS_SIX_STEP_H + +#include "apt.h" + +typedef enum { + STEP1 = 0, + STEP2, + STEP3, + STEP4, + STEP5, + STEP6, + STEP_MAX_NUM +} StepEnum; + +typedef enum { + U = 0, + V, + W, + PHASE_MAX_NUMS +} PhaseEnum; + +typedef enum { + APT_CHA_PWM_CHB_LOW, + APT_CHA_LOW_CHB_HIGH, + APT_CHA_LOW_CHB_LOW +} APT_Act; + +/** + * @brief Three-phase static coordinate frame variable. + */ +typedef struct { + APT_Handle *u; /**< Apt handle for controlling phase U. */ + APT_Handle *v; /**< Apt handle for controlling phase V. */ + APT_Handle *w; /**< Apt handle for controlling phase W. */ +} UVW_AptReg; + +typedef struct { + unsigned char phaseStep; /* Current step. */ + UVW_AptReg controlApt; /* Apt handles for controlling H bridge. */ +} SixStepHandle; + +typedef struct { + unsigned int upperout; /* High tube level */ + unsigned int upperstate; /* High tube state */ + unsigned int lowerout; /* Low tube level */ + unsigned int lowerstate; /* Low tube state */ +} AptOutCombination; + +void SixStepPwm(const SixStepHandle *handle); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h new file mode 100644 index 00000000..d92ed312 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h @@ -0,0 +1,188 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_status.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_STATUS_H +#define McuMagicTag_MCS_STATUS_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "typedefs.h" +#include "mcs_assert.h" + +/* Typedef definitions ------------------------------------------------------------------------- */ +/** + * @brief System status define + */ +typedef union { + unsigned short all; + struct { + unsigned short cmdStart : 1; /**< Indicates that a start system command has been received. */ + unsigned short cmdStop : 1; /**< Indicates that a stop system command has been received. */ + unsigned short isRunning : 1; /**< Indicates that the system is running (enable signal) */ + unsigned short sysError : 1; /**< Indicates that the system reports an error. */ + unsigned short poweron : 1; /**< Indicates that the power-on initialization phase is complete. */ + unsigned short capcharge : 1; /**< Indicates that the bootstrap capacitor charging phase is complete. */ + unsigned short adczero : 1; /**< The current sampling point is reset to zero after power-on. */ + } BIT; +} SysStatusReg; + +/** + * @brief Get status of BIT cmdStart. + * @param sysStatus System status register handle. + * @retval Status of BIT cmdStart. + */ +static inline bool SysGetCmdStart(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.cmdStart == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT cmdStart. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStartSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStart = 1; +} + +/** + * @brief Clear BIT cmdStart. + * @param handle System status register handle. + * @retval None. + */ +static inline void SysCmdStartClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStart = 0; +} + +/** + * @brief Get status of BIT cmdStop. + * @param sysStatus System status register handle. + * @retval Status of BIT cmdStart. + */ +static inline bool SysGetCmdStop(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.cmdStop == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStop = 1; +} + +/** + * @brief Clear BIT cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStop = 0; +} + +/** + * @brief Get status of BIT isRunning. + * @param sysStatus System status register handle. + * @retval Status of BIT isRunning. + */ +static inline bool SysIsRunning(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.isRunning == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.isRunning = 1; +} + +/** + * @brief Clear BIT isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.isRunning = 0; +} + +/** + * @brief Get status of BIT sysError. + * @param sysStatus System status register handle. + * @retval Status of BIT sysError. + */ +static inline bool SysIsError(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.sysError == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.sysError = 1; +} + +/** + * @brief Clear BIT sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.sysError = 0; +} + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/readme.md b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/readme.md new file mode 100644 index 00000000..2e0a0107 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/mcs_sensorless_bldc_six_step_wave/readme.md @@ -0,0 +1,13 @@ +# Bldc_Sensorless_Six_Step_Wave + +**【功能描述】** ++ 基于反电动势采样的无感电机六步方波调速系统应用 + +**【环境要求】** ++ 所用单板电源为12V低压,电机选用GBM2804H-100T云台电机 + +**【IDE配置方法】** ++ chipConfig中的sample栏目里面选中Bldc Sensorless Six Step Wave示例,然后点击生成代码即可 + +**【注意事项】** ++ 供电电源12V \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/inc/oled.h b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/inc/oled.h new file mode 100644 index 00000000..3939b73a --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/inc/oled.h @@ -0,0 +1,46 @@ +#ifndef __OLED__H__ +#define __OLED__H__ + +#define OLED_CMD 0 //写命令 +#define OLED_DATA 1 //写数据 + +#define OLED_MODE 0 +#define SIZE 8 +#define XLevelL 0x00 +#define XLevelH 0x10 +#define Max_Column 128 +#define Max_Row 64 +#define Brightness 0xFF +#define X_WIDTH 128 +#define Y_WIDTH 64 + +BASE_StatusType I2C_Read(unsigned char addr, unsigned char *buffer, unsigned int length); +BASE_StatusType I2C_Write(unsigned char addr, unsigned char data, unsigned int length); + +void OLED_Init(void); + +void OLED_WriteCommand(unsigned char IIC_Command); +void OLED_WriteData(unsigned char IIC_Data); + +void OLED_Write_DataOrCommand(unsigned dat,unsigned cmd); +void OLED_Clear(void); + +void OLED_Display_On(void); + +void OLED_Set_Pos(unsigned char x, unsigned char y); + +void OLED_ShowChar(unsigned char x,unsigned char y,unsigned char chr,unsigned char Char_Size); +void OLED_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len,unsigned char size); +void OLED_ShowString(unsigned char x,unsigned char y,char *chr,unsigned char Char_Size); + +//显示汉字 +void OLED_displaychina(unsigned char x,unsigned char y,unsigned char *ch); + +void OLED_displaystr(unsigned char col,unsigned char page,unsigned char *str); + +unsigned int oled_pow(unsigned char m,unsigned char n); + + +void OLED_displaychar(unsigned char col,unsigned char page,unsigned char eng); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/inc/oled_fonts.h b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/inc/oled_fonts.h new file mode 100644 index 00000000..2329281a --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/inc/oled_fonts.h @@ -0,0 +1,562 @@ + + + + +//常用ASCII表 +//偏移量32 +//ASCII字符集 +//偏移量32 + +/************************************6*8的点阵************************************/ +const unsigned char F6x8[][6] = { +{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// sp +{0x00, 0x00, 0x00, 0x2f, 0x00, 0x00},// ! +{0x00, 0x00, 0x07, 0x00, 0x07, 0x00},// " +{0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14},// # +{0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12},// $ +{0x00, 0x62, 0x64, 0x08, 0x13, 0x23},// % +{0x00, 0x36, 0x49, 0x55, 0x22, 0x50},// & +{0x00, 0x00, 0x05, 0x03, 0x00, 0x00},// ' +{0x00, 0x00, 0x1c, 0x22, 0x41, 0x00},// ( +{0x00, 0x00, 0x41, 0x22, 0x1c, 0x00},// ) +{0x00, 0x14, 0x08, 0x3E, 0x08, 0x14},// * +{0x00, 0x08, 0x08, 0x3E, 0x08, 0x08},// + +{0x00, 0x00, 0x00, 0xA0, 0x60, 0x00},// , +{0x00, 0x08, 0x08, 0x08, 0x08, 0x08},// - +{0x00, 0x00, 0x60, 0x60, 0x00, 0x00},// . +{0x00, 0x20, 0x10, 0x08, 0x04, 0x02},// / +{0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E},// 0 +{0x00, 0x00, 0x42, 0x7F, 0x40, 0x00},// 1 +{0x00, 0x42, 0x61, 0x51, 0x49, 0x46},// 2 +{0x00, 0x21, 0x41, 0x45, 0x4B, 0x31},// 3 +{0x00, 0x18, 0x14, 0x12, 0x7F, 0x10},// 4 +{0x00, 0x27, 0x45, 0x45, 0x45, 0x39},// 5 +{0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30},// 6 +{0x00, 0x01, 0x71, 0x09, 0x05, 0x03},// 7 +{0x00, 0x36, 0x49, 0x49, 0x49, 0x36},// 8 +{0x00, 0x06, 0x49, 0x49, 0x29, 0x1E},// 9 +{0x00, 0x00, 0x36, 0x36, 0x00, 0x00},// : +{0x00, 0x00, 0x56, 0x36, 0x00, 0x00},// ; +{0x00, 0x08, 0x14, 0x22, 0x41, 0x00},// < +{0x00, 0x14, 0x14, 0x14, 0x14, 0x14},// = +{0x00, 0x00, 0x41, 0x22, 0x14, 0x08},// > +{0x00, 0x02, 0x01, 0x51, 0x09, 0x06},// ? +{0x00, 0x32, 0x49, 0x59, 0x51, 0x3E},// @ +{0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C},// A +{0x00, 0x7F, 0x49, 0x49, 0x49, 0x36},// B +{0x00, 0x3E, 0x41, 0x41, 0x41, 0x22},// C +{0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C},// D +{0x00, 0x7F, 0x49, 0x49, 0x49, 0x41},// E +{0x00, 0x7F, 0x09, 0x09, 0x09, 0x01},// F +{0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A},// G +{0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F},// H +{0x00, 0x00, 0x41, 0x7F, 0x41, 0x00},// I +{0x00, 0x20, 0x40, 0x41, 0x3F, 0x01},// J +{0x00, 0x7F, 0x08, 0x14, 0x22, 0x41},// K +{0x00, 0x7F, 0x40, 0x40, 0x40, 0x40},// L +{0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F},// M +{0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F},// N +{0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E},// O +{0x00, 0x7F, 0x09, 0x09, 0x09, 0x06},// P +{0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E},// Q +{0x00, 0x7F, 0x09, 0x19, 0x29, 0x46},// R +{0x00, 0x46, 0x49, 0x49, 0x49, 0x31},// S +{0x00, 0x01, 0x01, 0x7F, 0x01, 0x01},// T +{0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F},// U +{0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F},// V +{0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F},// W +{0x00, 0x63, 0x14, 0x08, 0x14, 0x63},// X +{0x00, 0x07, 0x08, 0x70, 0x08, 0x07},// Y +{0x00, 0x61, 0x51, 0x49, 0x45, 0x43},// Z +{0x00, 0x00, 0x7F, 0x41, 0x41, 0x00},// [ +{0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55},// 55 +{0x00, 0x00, 0x41, 0x41, 0x7F, 0x00},// ] +{0x00, 0x04, 0x02, 0x01, 0x02, 0x04},// ^ +{0x00, 0x40, 0x40, 0x40, 0x40, 0x40},// _ +{0x00, 0x00, 0x01, 0x02, 0x04, 0x00},// ' +{0x00, 0x20, 0x54, 0x54, 0x54, 0x78},// a +{0x00, 0x7F, 0x48, 0x44, 0x44, 0x38},// b +{0x00, 0x38, 0x44, 0x44, 0x44, 0x20},// c +{0x00, 0x38, 0x44, 0x44, 0x48, 0x7F},// d +{0x00, 0x38, 0x54, 0x54, 0x54, 0x18},// e +{0x00, 0x08, 0x7E, 0x09, 0x01, 0x02},// f +{0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C},// g +{0x00, 0x7F, 0x08, 0x04, 0x04, 0x78},// h +{0x00, 0x00, 0x44, 0x7D, 0x40, 0x00},// i +{0x00, 0x40, 0x80, 0x84, 0x7D, 0x00},// j +{0x00, 0x7F, 0x10, 0x28, 0x44, 0x00},// k +{0x00, 0x00, 0x41, 0x7F, 0x40, 0x00},// l +{0x00, 0x7C, 0x04, 0x18, 0x04, 0x78},// m +{0x00, 0x7C, 0x08, 0x04, 0x04, 0x78},// n +{0x00, 0x38, 0x44, 0x44, 0x44, 0x38},// o +{0x00, 0xFC, 0x24, 0x24, 0x24, 0x18},// p +{0x00, 0x18, 0x24, 0x24, 0x18, 0xFC},// q +{0x00, 0x7C, 0x08, 0x04, 0x04, 0x08},// r +{0x00, 0x48, 0x54, 0x54, 0x54, 0x20},// s +{0x00, 0x04, 0x3F, 0x44, 0x40, 0x20},// t +{0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C},// u +{0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C},// v +{0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C},// w +{0x00, 0x44, 0x28, 0x10, 0x28, 0x44},// x +{0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C},// y +{0x00, 0x44, 0x64, 0x54, 0x4C, 0x44},// z +{0x14, 0x14, 0x14, 0x14, 0x14, 0x14},// horiz lines +}; + +/****************************************8*16的点阵************************************/ +const unsigned char F8X16[]={ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 + 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1 + 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2 + 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3 + 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4 + 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5 + 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6 + 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7 + 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8 + 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9 + 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10 + 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14 + 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15 + 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16 + 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17 + 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18 + 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19 + 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20 + 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21 + 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22 + 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23 + 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24 + 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25 + 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26 + 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27 + 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28 + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29 + 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30 + 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31 + 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32 + 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33 + 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34 + 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35 + 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36 + 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37 + 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38 + 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39 + 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40 + 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41 + 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42 + 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43 + 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44 + 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45 + 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46 + 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47 + 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48 + 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49 + 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50 + 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51 + 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52 + 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53 + 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54 + 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55 + 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56 + 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57 + 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58 + 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59 + 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60 + 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61 + 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63 + 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65 + 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66 + 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67 + 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69 + 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70 + 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71 + 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72 + 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73 + 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74 + 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75 + 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76 + 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77 + 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79 + 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80 + 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81 + 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82 + 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83 + 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84 + 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85 + 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86 + 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87 + 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88 + 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89 + 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90 + 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91 + 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92 + 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93 + 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 +}; + + +unsigned char Aciss_8X16[]={ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,/*"!",1*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x10,0x0C,0x02,0x10,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*""",2*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x40,0xC0,0x78,0x40,0xC0,0x78,0x00,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x00,/*"#",3*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x70,0x88,0x88,0xFC,0x08,0x30,0x00,0x00,0x18,0x20,0x20,0xFF,0x21,0x1E,0x00,/*"$",4*/ +/* (8 X 16 , 宋体 )*/ + +0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00,0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00,/*"%",5*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x2C,0x19,0x27,0x21,0x10,/*"&",6*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x12,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",7*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,/*"(",8*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,/*")",9*/ +/* (8 X 16 , 宋体 )*/ + +0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,/*"*",10*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01,/*"+",11*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x70,0x00,0x00,0x00,0x00,0x00,/*",",12*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/*"-",13*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*".",14*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0xC0,0x38,0x04,0x00,0x00,0x60,0x18,0x07,0x00,0x00,0x00,0x00,/*"/",15*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",16*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*"1",17*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",18*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,/*"3",19*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,/*"4",20*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,/*"5",21*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*"6",22*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,/*"7",23*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",24*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,/*"9",25*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,/*":",26*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,/*";",27*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,/*"<",28*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,/*"=",29*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,/*">",30*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x70,0x48,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x30,0x37,0x00,0x00,0x00,/*"?",31*/ +/* (8 X 16 , 宋体 )*/ + +0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x28,0x2F,0x28,0x17,0x00,/*"@",32*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,/*"A",33*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,/*"B",34*/ +/* (8 X 16 , 宋体 )*/ + +0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,/*"C",35*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",36*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,/*"E",37*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,/*"F",38*/ +/* (8 X 16 , 宋体 )*/ + +0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,/*"G",39*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,/*"H",40*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"I",41*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,/*"J",42*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,/*"K",43*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,/*"L",44*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x01,0x3E,0x01,0x3F,0x20,0x00,/*"M",45*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,/*"N",46*/ +/* (8 X 16 , 宋体 )*/ + +0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,/*"O",47*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,/*"P",48*/ +/* (8 X 16 , 宋体 )*/ + +0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x28,0x28,0x30,0x50,0x4F,0x00,/*"Q",49*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,/*"R",50*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,/*"X",51*/ +/* (8 X 16 , 宋体 )*/ + +0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,/*"T",52*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"U",53*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,/*"V",54*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00,/*"W",55*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,/*"X",56*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,/*"Y",57*/ +/* (8 X 16 , 宋体 )*/ + +0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,/*"Z",58*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,/*"[",59*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x04,0x38,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,/*"\",60*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,/*"]",61*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x04,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",62*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,/*"_",63*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"`",64*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x19,0x24,0x24,0x12,0x3F,0x20,0x00,/*"a",65*/ +/* (8 X 16 , 宋体 )*/ + +0x10,0xF0,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"b",66*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,/*"c",67*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x90,0xF0,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"d",68*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x24,0x24,0x24,0x24,0x17,0x00,/*"e",69*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x80,0x80,0xE0,0x90,0x90,0x20,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"f",70*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,/*"g",71*/ +/* (8 X 16 , 宋体 )*/ + +0x10,0xF0,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"h",72*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"i",73*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,/*"j",74*/ +/* (8 X 16 , 宋体 )*/ + +0x10,0xF0,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x06,0x29,0x30,0x20,0x00,/*"k",75*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"l",76*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,/*"m",77*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"n",78*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"o",79*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0x91,0x20,0x20,0x11,0x0E,0x00,/*"p",80*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0x91,0xFF,0x80,/*"q",81*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,/*"r",82*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,/*"s",83*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x10,0x00,/*"t",84*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"u",85*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x03,0x0C,0x30,0x0C,0x03,0x00,0x00,/*"v",86*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x01,0x0E,0x30,0x0C,0x07,0x38,0x06,0x01,/*"w",87*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x80,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x20,0x31,0x0E,0x2E,0x31,0x20,0x00,/*"x",88*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x81,0x86,0x78,0x18,0x06,0x01,0x00,/*"y",89*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,/*"z",90*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0x00,0xFC,0x02,0x02,0x00,0x00,0x00,0x00,0x01,0x3E,0x40,0x40,/*"{",91*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,/*"|",92*/ +/* (8 X 16 , 宋体 )*/ + +0x02,0x02,0xFC,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x3E,0x01,0x00,0x00,0x00,0x00,/*"}",93*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x02,0x01,0x02,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",94*/ +/* (8 X 16 , 宋体 )*/ + +}; +//确定汉字字模数据位置 +const unsigned char indexs[][2]={"基","于","海","思","单","片","机","智","能","中","专","速","度","一", +"二","三","四","五","档","位","电"}; + + +const unsigned char Hzk[][32]={ +{0x00,0x04,0x04,0x04,0xFF,0x54,0x54,0x54,0x54,0x54,0xFF,0x04,0x04,0x04,0x00,0x00}, +{0x11,0x11,0x89,0x85,0x93,0x91,0x91,0xFD,0x91,0x91,0x93,0x85,0x89,0x11,0x11,0x00},/*"基",0*/ +{0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00}, +{0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"于",1*/ +{0x10,0x60,0x02,0x0C,0xC0,0x10,0x08,0xF7,0x14,0x54,0x94,0x14,0xF4,0x04,0x00,0x00}, +{0x04,0x04,0x7C,0x03,0x00,0x01,0x1D,0x13,0x11,0x55,0x99,0x51,0x3F,0x11,0x01,0x00},/*"海",2*/ +{0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00}, +{0x40,0x38,0x01,0x00,0x3C,0x40,0x40,0x42,0x4C,0x40,0x40,0x70,0x05,0x08,0x30,0x00},/*"思",3*/ +{0x00,0x00,0xF8,0x49,0x4A,0x4C,0x48,0xF8,0x48,0x4C,0x4A,0x49,0xF8,0x00,0x00,0x00}, +{0x10,0x10,0x13,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x13,0x10,0x10,0x00},/*"单",4*/ +{0x00,0x00,0x00,0xFE,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x00,0x00}, +{0x00,0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x00},/*"片",5*/ +{0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00}, +{0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00},/*"机",6*/ +{0x10,0x94,0x53,0x32,0x1E,0x32,0x52,0x10,0x00,0x7E,0x42,0x42,0x42,0x7E,0x00,0x00}, +{0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00},/*"智",7*/ +{0x08,0xCC,0x4A,0x49,0x48,0x4A,0xCC,0x18,0x00,0x7F,0x88,0x88,0x84,0x82,0xE0,0x00}, +{0x00,0xFF,0x12,0x12,0x52,0x92,0x7F,0x00,0x00,0x7E,0x88,0x88,0x84,0x82,0xE0,0x00},/*"能",8*/ +{0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00}, +{0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00},/*"中",9*/ +{0x40,0x40,0x48,0x48,0x48,0xC8,0x78,0x4F,0x48,0x48,0x48,0x48,0x48,0x40,0x40,0x00}, +{0x00,0x00,0x00,0x00,0x03,0x12,0x12,0x22,0x22,0x52,0x8A,0x06,0x00,0x00,0x00,0x00},/*"专",10*/ + +{0x40,0x40,0x42,0xCC,0x00,0x04,0xF4,0x94,0x94,0xFF,0x94,0x94,0xF4,0x04,0x00,0x00}, +{0x00,0x40,0x20,0x1F,0x20,0x48,0x44,0x42,0x41,0x5F,0x41,0x42,0x44,0x48,0x40,0x00},/*"速",11*/ +{0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00}, +{0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00},/*"度",12*/ +{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00}, +{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"一",13*/ +{0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00}, +{0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00},/*"二",14*/ +{0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00}, +{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00},/*"三",15*/ +{0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00}, +{0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00},/*"四",16*/ +{0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00}, +{0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00},/*"五",17*/ +{0x10,0x10,0xD0,0xFF,0x90,0x10,0x40,0x42,0x5C,0x40,0x7F,0x40,0x50,0xCE,0x00,0x00}, +{0x04,0x03,0x00,0xFF,0x00,0x01,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00},/*"档",18*/ +{0x00,0x80,0x60,0xF8,0x07,0x10,0x90,0x10,0x11,0x16,0x10,0x10,0xD0,0x10,0x00,0x00}, +{0x01,0x00,0x00,0xFF,0x40,0x40,0x41,0x5E,0x40,0x40,0x70,0x4E,0x41,0x40,0x40,0x00},/*"位",19*/ +{0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00}, +{0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"电",20*/ + + + + +}; + + + + + + + + + + + + + + + + diff --git a/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/src/oled.c b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/src/oled.c new file mode 100644 index 00000000..355dd0d1 --- /dev/null +++ b/vendor/yibaina_3061M/E7050_oled_ifd_sample/user/oled/src/oled.c @@ -0,0 +1,352 @@ +#include "main.h" +#include "debug.h" +#include "oled_fonts.h" +#include "oled.h" +#include + +#define OLED_WRITE_REG 0x78 //0x78 ap3216 0x3C +#define OLED_READ_REG OLED_WRITE_REG+1 + +#define I2C_SAMPLE_OLED_PAGE_SIZE 7//一次写一个字节 +#define I2C_SAMPLE_OLED_ADDR_SIZE 1 +#define I2C_SAMPLE_MAX_TIMEOUT 10000 + + + + +/** + * @brief 在阻塞模式下读取数据 + * @param addr 要读取的寄存器地址 + * @param buffer 用于存储读取数据的缓冲区 + * @param length 要读取的数据长度 + * @retval BASE状态类型: OK, ERROR, BUSY, TIMEOUT, NOT SUPPORT + */ +BASE_StatusType I2C_Read(unsigned char addr, unsigned char *buffer, unsigned int length) +{ + BASE_StatusType ret = BASE_STATUS_OK; + + // 存储要读取的寄存器地址 + unsigned char tempAddr[I2C_SAMPLE_OLED_ADDR_SIZE]; + tempAddr[0] = addr; + + // 发送寄存器地址 + ret = HAL_I2C_MasterWriteDMA(&g_i2c0, OLED_WRITE_REG, tempAddr, I2C_SAMPLE_OLED_ADDR_SIZE); + + // 发送寄存器地址是否成功 + if (ret != BASE_STATUS_OK){ + DBG_PRINTF("LINE:%d,Read Data Fail,ret:%d\r\n", __LINE__, ret); + return ret; + } + + /* 从设备读取数据 */ + ret = HAL_I2C_MasterReadDMA(&g_i2c0, OLED_READ_REG, buffer, length); + + // 从寄存器地址读取数据是否成功 + if (ret != BASE_STATUS_OK){ + DBG_PRINTF("LINE:%d,Read Data Fail,ret:%d\r\n", __LINE__, ret); + return ret; + } + return ret; +} + +/** + * @brief 在阻塞模式下写入数据 + * @param addr 寄存器地址 + * @param data 要写入的数据 + * @param length 数据长度 + * @retval BASE状态类型: OK, ERROR, BUSY, TIMEOUT, NOT SUPPORT + */ +BASE_StatusType I2C_Write(unsigned char addr, unsigned char data, unsigned int length) +{ + BASE_StatusType ret = BASE_STATUS_OK; + + // 使用两个字节的数组,存储写寄存器地址和发送数据 + unsigned char tempWrite[I2C_SAMPLE_OLED_PAGE_SIZE + I2C_SAMPLE_OLED_ADDR_SIZE]; + tempWrite[0] = addr; // 要写入的寄存器地址 + tempWrite[1] = data; // 要写入的数据 + + // 写入的寄存器地址长度+写入的数据长度(2字节) + ret = HAL_I2C_MasterWriteDMA(&g_i2c0, OLED_WRITE_REG, tempWrite, I2C_SAMPLE_OLED_ADDR_SIZE + length); + + if (ret != BASE_STATUS_OK){ + DBG_PRINTF("LINE:%d,Write Data Fail!,ret:%d\r\n", __LINE__, ret); + } + return ret; +} + +// OLED屏幕初始化 +void OLED_Init(void) +{ + BASE_FUNC_DELAY_MS(100); + I2C_Write(0x00, 0xAE, 1); // 关闭显示 + I2C_Write(0x00, 0x00, 1); // 设置低列地址 + I2C_Write(0x00, 0x10, 1); // 设置高列地址 + I2C_Write(0x00, 0x40, 1); // 设置起始行地址 + I2C_Write(0x00, 0xB0, 1); // 设置页面寻址模式的起始页地址,0-7 + I2C_Write(0x00, 0x81, 1); // 设置对比度控制寄存器 + I2C_Write(0x00, 0xFF, 1); // 对比度调节 0x00~0xff + I2C_Write(0x00, 0xA1, 1); // 设置段重映射 0 到 127 + I2C_Write(0x00, 0xA6, 1); // 设置正常显示 + I2C_Write(0x00, 0xA8, 1); // 设置多重扫描比率(1 到 64) + I2C_Write(0x00, 0x3F, 1); // 设置多重扫描比率的具体值 + I2C_Write(0x00, 0xC8, 1); // 设置COM输出扫描方向 + I2C_Write(0x00, 0xD3, 1); // 设置显示偏移 + I2C_Write(0x00, 0x00, 1); // 不偏移 + I2C_Write(0x00, 0xD5, 1); // 设置显示时钟分频比/振荡器频率 + I2C_Write(0x00, 0x80, 1); // 设置分频比 + I2C_Write(0x00, 0xD8, 1); // 设置预充电周期 + I2C_Write(0x00, 0x05, 1); // 设置预充电周期的具体值 + I2C_Write(0x00, 0xD9, 1); // 设置预充电周期 + I2C_Write(0x00, 0xF1, 1); // 设置预充电周期的具体值 + I2C_Write(0x00, 0xDA, 1); // 设置COM引脚硬件配置 + I2C_Write(0x00, 0x12, 1); // 设置COM引脚硬件配置的具体值 + I2C_Write(0x00, 0xDB, 1); // 设置VCOMH + I2C_Write(0x00, 0x30, 1); // 设置VCOMH的具体值 0x20, 0.77xVcc + I2C_Write(0x00, 0x8D, 1); // 设置DC-DC使能 + I2C_Write(0x00, 0x14, 1); // 设置DC-DC使能的具体值 + I2C_Write(0x00, 0xAF, 1); // 打开OLED面板 + OLED_Clear(); // 清屏 +} + +// 写命令 +void OLED_WriteCommand(unsigned char dat){ + I2C_Write(0x00,dat,1); +} + +// 写数据 +void OLED_WriteData(unsigned char dat){ + I2C_Write(0x40,dat,1); +} + +// 区别是写数据还是写命令 +void OLED_Write_DataOrCommand(unsigned dat,unsigned cmd) +{ + if(cmd){ + OLED_WriteData(dat); + } + else{ + OLED_WriteCommand(dat); + } +} + +// 清屏 +void OLED_Clear(void) +{ + unsigned char i, n; + for (i = 0; i < 8; i++) + { + OLED_Write_DataOrCommand(0xb0 + i, OLED_CMD); // 设置页地址(0~7) + OLED_Write_DataOrCommand(0x02, OLED_CMD); // 设置显示位置—列低地址 0x00 + OLED_Write_DataOrCommand(0x10, OLED_CMD); // 设置显示位置—列高地址 + for (n = 0; n < 128; n++) + OLED_Write_DataOrCommand(0, OLED_DATA); + } // 更新显示 +} + +// 开启OLED +void OLED_Display_On(void) +{ + OLED_Write_DataOrCommand(0X8D, OLED_CMD); // 设置电荷泵 + OLED_Write_DataOrCommand(0X14, OLED_CMD); // 开启电荷泵 + OLED_Write_DataOrCommand(0XAF, OLED_CMD); // OLED唤醒 +} + +// 设置起始点坐标 +void OLED_Set_Pos(unsigned char x, unsigned char y) +{ + OLED_Write_DataOrCommand(0xb0 + y, OLED_CMD); + OLED_Write_DataOrCommand((((x + 2) & 0xf0) >> 4) | 0x10, OLED_CMD); // 取高位 + OLED_Write_DataOrCommand(((x + 2) & 0x0f), OLED_CMD); // 取低位 +} + +// 显示字符 +void OLED_ShowChar(unsigned char x,unsigned char y,unsigned char chr,unsigned char Char_Size) +{ + unsigned char c = 0, i = 0; + c = chr - ' '; // 得到偏移后的值 + if (x > Max_Column - 1) + { + x = 0; + y = y + 2; + } + if (Char_Size == 16) + { + OLED_Set_Pos(x, y); + for (i = 0; i < 8; i++) + OLED_Write_DataOrCommand(F8X16[c * 16 + i], OLED_DATA); + OLED_Set_Pos(x, y + 1); + for (i = 0; i < 8; i++) + OLED_Write_DataOrCommand(F8X16[c * 16 + i + 8], OLED_DATA); + } + else + { + OLED_Set_Pos(x, y); + for (i = 0; i < 6; i++) + OLED_Write_DataOrCommand(F6x8[c][i], OLED_DATA); + } +} + + + +void OLED_displaychar(unsigned char col,unsigned char page,unsigned char eng) +{ + unsigned char font_res=0; + + font_res=eng-' '; //在ACISS的第几次位 + + for(unsigned char i=0;i<2;i++) + { + //设置显示位置 + OLED_WriteCommand(0x00 + (col & 0x0f));//设置低位列地址 + OLED_WriteCommand(0x10 + ((col & 0xf0)>>4));//设置高位列地址 + OLED_WriteCommand(0xb0+page+i);//设置页地址 + for(unsigned char j=0;j<8;j++) + { + OLED_WriteData(Aciss_8X16[16*font_res+8*i+j]); + } + } +} + + + +//显示2个数字 +//x,y :起点坐标 +//len :数字的位数 +//size:字体大小 +//mode:模式 0,填充模式;1,叠加模式 +//num:数值(0~4294967295); + +void OLED_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len,unsigned char size2) +{ + unsigned char t,temp; + unsigned char enshow = 0; + for (t = 0; t < len; t++) + { + temp = (num / oled_pow(10, len - t - 1)) % 10; // 根据位数来显示数字 + if (enshow == 0 && t < (len - 1)) + { + if (temp == 0) + { + OLED_ShowChar(x + (size2)*t, y, ' ', size2); + continue; + } + else + enshow = 1; + } + OLED_ShowChar(x + (size2)*t, y, temp + '0', size2); // ? + } +} + + +//显示一个字符号串 +void OLED_ShowString(unsigned char x,unsigned char y,char *chr,unsigned char Char_Size) +{ + unsigned char j = 0; + while (chr[j] != '\0') + { + OLED_ShowChar(x, y, chr[j], Char_Size); + x += 8; + if (x > 120) +{ + x = 0; + y += 2; + } + j++; + } +} + + + + + +void OLED_displaychina(unsigned char x,unsigned char y,unsigned char *ch) +{ + int t,adder=0; + unsigned char k; + //确定汉字在小字库的位置 + for(k=0;k< sizeof(indexs) /sizeof(indexs[0]);k++) + { + if(*ch == indexs[k][0] && *(ch+1)==indexs[k][1]) + break; + } + + OLED_Set_Pos(x,y); + for(t=0;t<16;t++) + { + OLED_Write_DataOrCommand(Hzk[2*k][t],OLED_DATA); + adder+=1; + } + OLED_Set_Pos(x,y+1); + for(t=0;t<16;t++) + { + OLED_Write_DataOrCommand(Hzk[2*k+1][t],OLED_DATA); + adder+=1; + } + + +} + +/* +Function name: OLED_displaystr +Description:OLED显字符串 +param: u8 col 列位置 + u8 page 行位置 + u8 *str 字符串 +retval: void +Remarks: + + +*/ + + +void OLED_displaystr(unsigned char col,unsigned char page,unsigned char *str) +{ + while(*str !='\0') + { + if(*str >= 0xA1)//显示汉字 + { + OLED_displaychina(col,page,str); + str+=3; + col+=16; + } + else//显示英文 + { + OLED_displaychar(col,page,*str); + str+=1; + col+=8; + } + + } +} + + + + + +// /***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/ +// void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]) +// { +// unsigned int j=0; +// unsigned char x,y; + +// if(y1%8==0) y=y1/8; +// else y=y1/8+1; +// for(y=y0;ySC_SYS_STAT.BIT.update_mode = 0; + SYSCTRL0->SC_SYS_STAT.BIT.update_mode_clear = 1; + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN1 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_7_AS_ACMP0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_7_AS_ACMP0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_7_AS_ACMP0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_7_AS_ACMP0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_7_AS_ACMP0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN48 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_6_AS_ACMP_N2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_6_AS_ACMP_N2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_6_AS_ACMP_N2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_6_AS_ACMP_N2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_6_AS_ACMP_N2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN47 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_5_AS_ACMP_P2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_5_AS_ACMP_P2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_5_AS_ACMP_P2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_5_AS_ACMP_P2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_5_AS_ACMP_P2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN4 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_6_AS_PGA0_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_6_AS_PGA0_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_6_AS_PGA0_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_6_AS_PGA0_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_6_AS_PGA0_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN5 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_5_AS_PGA0_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_5_AS_PGA0_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_5_AS_PGA0_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_5_AS_PGA0_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_5_AS_PGA0_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN3 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_7_AS_PGA0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_7_AS_PGA0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_7_AS_PGA0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_7_AS_PGA0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_7_AS_PGA0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN7 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_7_AS_ADC_AIN9); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_7_AS_ADC_AIN9, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_7_AS_ADC_AIN9, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_7_AS_ADC_AIN9, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_7_AS_ADC_AIN9, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN2 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO5_1_AS_ADC_AIN5); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO5_1_AS_ADC_AIN5, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO5_1_AS_ADC_AIN5, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO5_1_AS_ADC_AIN5, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO5_1_AS_ADC_AIN5, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN14 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_7_AS_ADC_AIN15); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_7_AS_ADC_AIN15, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_7_AS_ADC_AIN15, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_7_AS_ADC_AIN15, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_7_AS_ADC_AIN15, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN11 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_5_AS_PGA1_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_5_AS_PGA1_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_5_AS_PGA1_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_5_AS_PGA1_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_5_AS_PGA1_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN12 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_6_AS_PGA1_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_6_AS_PGA1_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_6_AS_PGA1_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_6_AS_PGA1_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_6_AS_PGA1_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN13 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_7_AS_PGA1_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_7_AS_PGA1_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_7_AS_PGA1_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_7_AS_PGA1_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_7_AS_PGA1_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN35 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_3_AS_GPIO2_3); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_3_AS_GPIO2_3, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_3_AS_GPIO2_3, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_3_AS_GPIO2_3, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_3_AS_GPIO2_3, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN27 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_0_AS_GPIO1_0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_0_AS_GPIO1_0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_0_AS_GPIO1_0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_0_AS_GPIO1_0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_0_AS_GPIO1_0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN41 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_4_AS_GPIO2_4); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_4_AS_GPIO2_4, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_4_AS_GPIO2_4, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_4_AS_GPIO2_4, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_4_AS_GPIO2_4, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN19 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_0_AS_APT0_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_0_AS_APT0_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_0_AS_APT0_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_0_AS_APT0_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_0_AS_APT0_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN23 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_0_AS_APT0_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_0_AS_APT0_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_0_AS_APT0_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_0_AS_APT0_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_0_AS_APT0_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN20 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_1_AS_APT1_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_1_AS_APT1_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_1_AS_APT1_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_1_AS_APT1_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_1_AS_APT1_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN24 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_1_AS_APT1_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_1_AS_APT1_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_1_AS_APT1_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_1_AS_APT1_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_1_AS_APT1_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN21 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_2_AS_APT2_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_2_AS_APT2_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_2_AS_APT2_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_2_AS_APT2_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_2_AS_APT2_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN25 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_2_AS_APT2_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_2_AS_APT2_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_2_AS_APT2_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_2_AS_APT2_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_2_AS_APT2_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ +} + +static void APT_SyncMasterInit(void) +{ + HAL_APT_MasterSyncInit(&g_apt0, APT_SYNC_OUT_ON_CNTR_ZERO); +} + +static void APT_SyncSlaveInit(void) +{ + APT_SlaveSyncIn aptSlave; + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt1, &aptSlave); + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt2, &aptSlave); + +} + +void SystemInit(void) +{ + IOConfig(); + DMA_Init(); + UART0_Init(); + ACMP0_Init(); + APT0_Init(); + APT1_Init(); + APT2_Init(); + ADC0_Init(); + PGA0_Init(); + PGA1_Init(); + TIMER0_Init(); + TIMER1_Init(); + GPIO_Init(); + + APT_SyncMasterInit(); + APT_SyncSlaveInit(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/main.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/main.c new file mode 100644 index 00000000..f16312ae --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/main.c @@ -0,0 +1,71 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + * @date 2025-04-17 15:09:50 + */ + +#include "typedefs.h" +#include "feature.h" +#include "mcs_motor_process.h" +#include "main.h" +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ +/* USER CODE END 0 */ +ACMP_Handle g_acmp0; +PGA_Handle g_pga0; +PGA_Handle g_pga1; +TIMER_Handle g_timer0; +TIMER_Handle g_timer1; +UART_Handle g_uart0; +APT_Handle g_apt0; +APT_Handle g_apt1; +APT_Handle g_apt2; +ADC_Handle g_adc0; +DMA_Handle g_dmac; +GPIO_Handle g_gpio2; +GPIO_Handle g_gpio1; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ +/* USER CODE END 1 */ + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + /* USER CODE END 2 */ + MotorMainProcess(); + /* USER CODE BEGIN 3 */ + /* 建议用户放置初始配置代码 */ + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + /* 建议用户放置周期性执行代码 */ + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h new file mode 100644 index 00000000..dea3ad66 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_carrier.h @@ -0,0 +1,142 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration for carrier interrupt processing function. + */ +#ifndef McuMagicTag_MCS_CARRIER_H +#define McuMagicTag_MCS_CARRIER_H + +#include "mcs_status.h" +#include "mcs_mtr_param.h" +#include "mcs_svpwm.h" +#include "mcs_curr_ctrl.h" +#include "mcs_if_ctrl.h" +#include "mcs_ramp_mgmt.h" +#include "mcs_spd_ctrl.h" +#include "mcs_fosmo.h" +#include "mcs_smo_4th.h" +#include "mcs_pll.h" +#include "mcs_startup.h" +#include "mcs_r1_svpwm.h" +#include "mcs_fw_ctrl.h" +#include "mcs_prot_user.h" + +typedef void (*MCS_ReadCurrUvwCb)(UvwAxis *CurrUvw); +typedef void (*MCS_SetPwmDutyCb)(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight); +typedef void (*MCS_SetADCTriggerTimeCb)(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB); + +/** + * @brief motor control FSM state define. + * @details motor control FSM state type: + * + FSM_IDLE -- IDLE state, system startup default. + * + FSM_OFFSET_CALIB -- Self calibrate, for ADC init. + * + FSM_CAP_CHARGE -- IPM cap charge. + * + FSM_CLEAR -- Clear before every run. + * + FSM_LOCATE -- Rotor position pre-locate. + * + FSM_STARTUP -- Start up. + * + FSM_SWITCH -- Transition state, control from open to closed loop. + * + FSM_RUN -- Normal running state. + * + FSM_WAIT_STOP -- Wait stopping. + * + FSM_STOP -- Normal stop. + * + FSM_FAULT -- Fault state, waiting for user process. + */ +typedef enum { + FSM_IDLE = 0, + FSM_OFFSET_CALIB, + FSM_CAP_CHARGE, + FSM_CLEAR, + FSM_LOCATE, + FSM_STARTUP, + FSM_SWITCH, + FSM_RUN, + FSM_WAIT_STOP, + FSM_STOP, + FSM_FAULT +} FsmState; + +/** + * @brief Sampling mode. + */ +typedef enum { + DUAL_RESISTORS = 0, + SINGLE_RESISTOR = 1 +} SampleMode; + +/** + * @brief Motor control data structure + */ +typedef struct { + unsigned char motorStateFlag; /**< Motor start/stop status flag. */ + float spdCmdHz; /**< External input speed command value. */ + float axisAngle; /**< Angle of the synchronous coordinate system. */ + float spdRefHz; /**< Command value after speed ramp management. */ + float currCtrlPeriod; /**< current loop control period. */ + float adc0Compensate; /**< ADC0 softwaretrim compensate value. */ + float adc1Compensate; /**< ADC1 softwaretrim compensate value. */ + float udc; /**< Bus voltage. */ + float powerBoardTemp; /**< Power boart surface temperature. */ + unsigned short aptMaxcntCmp; /**< Apt Maximum Comparison Count. */ + float adcCurrCofe; /**< Adc current sampling cofeature. */ + + unsigned short sysTickCnt; /**< System Timer Tick Count. */ + unsigned short capChargeTickNum; /**< Bootstrap Capacitor Charge Tick Count. */ + volatile unsigned int msTickCnt; /**< Millisecond-level counter, which can be used in 1-ms and 5-ms tasks. */ + unsigned short msTickNum; /**< Number of ticks corresponding to 1 ms. */ + char obserType; /**< Set Observer Type. */ + char controlMode; /**< Set foc control or sixstep bldc control mode or others. */ + char spdAdjustMode; /**< Set speed adjust mode. */ + char uartConnectFlag; /**< Uart connect success flag. */ + short uartHeartDetCnt; /**< Uart connect heart detect count. */ + float uartTimeStamp; /**< Uart data time stamp. */ + SysStatusReg statusReg; /**< System status. */ + FsmState stateMachine; /**< Motor Control State Machine. */ + + SampleMode sampleMode; /**< Current sampling mode setting: single resistor, double resistor. */ + MOTOR_Param mtrParam; /**< Motor parameters. */ + FOSMO_Handle smo; /**< SMO observer handle. */ + SMO4TH_Handle smo4th; /**< SMO 4th observer handle. */ + IF_Handle ifCtrl; /**< I/F control handle. */ + SVPWM_Handle sv; /**< Dual-resistance/three-resistance sampling SVPWM Handle. */ + R1SVPWM_Handle r1Sv; /**< Single-resistance phase-shifted SVPWM handle. */ + RMG_Handle spdRmg; /**< Ramp management struct for the speed controller input reference. */ + SPDCTRL_Handle spdCtrl; /**< Speed loop Control Handle. */ + CURRCTRL_Handle currCtrl; /**< Current loop control handle. */ + STARTUP_Handle startup; /**< Startup Switch Handle. */ + FW_Handle fw; /**< Flux-Weakening Handle. */ + + DqAxis idqRef; /**< Command value of the dq axis current. */ + UvwAxis currUvw; /**< Three-phase current sampling value. */ + AlbeAxis iabFbk; /**< αβ-axis current feedback value. */ + DqAxis idqFbk; /**< Current feedback value of the dq axis. */ + DqAxis vdqRef; /**< Current loop output dq voltage. */ + AlbeAxis vabRef; /**< Current loop output voltage αβ. */ + UvwAxis dutyUvw; /**< UVW three-phase duty cycle. */ + UvwAxis dutyUvwLeft; /**< Single Resistor UVW Three-Phase Left Duty Cycle. */ + UvwAxis dutyUvwRight; /**< Single Resistor UVW Three-Phase Right Duty Cycle. */ + + MCS_ReadCurrUvwCb readCurrUvwCb; /**< Read current callback function. */ + MCS_SetPwmDutyCb setPwmDutyCb; /**< Set the duty cycle callback function. */ + MCS_SetADCTriggerTimeCb setADCTriggerTimeCb; /**< Sets the ADC trigger point callback function. */ + + MotorProtStatus_Handle prot; /**< Motor protect status detection flag bit handle. */ +} MTRCTRL_Handle; + +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h new file mode 100644 index 00000000..38c00b5d --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_chip_config.h @@ -0,0 +1,76 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_chip_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H/ECBMCU201MPC app. + */ + +#ifndef McuMagicTag_MCS_CHIPCONFIG_H +#define McuMagicTag_MCS_CHIPCONFIG_H + +#include "feature.h" + +#if defined (CHIP_3061MNPICA) || defined (CHIP_3061MNPIKA) || defined (CHIP_3061MNNICA) || \ + defined (CHIP_3061MNNIKA) || defined (CHIP_3061MNPIC8) || defined(CHIP_3061MNNIC8) || \ + defined (CHIP_3061MNPIK8) || defined (CHIP_3061MNNIK8) + + #define ADCPTT_HANDLE g_adc0 + #define ADCRESIS_HANDLE g_adc0 + #define ADCUDC_HANDLE g_adc0 + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc0 + #define LED1_HANDLE g_gpio2 + #define LED2_HANDLE g_gpio1 + #define LED2_PIN GPIO_PIN_0 + #define LED1_PIN GPIO_PIN_3 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCUSOCNUM ADC_SOC_NUM1 + #define ADCRESISSOCNUM ADC_SOC_NUM3 + #define ADCUDCSOCNUM ADC_SOC_NUM4 + #define ADCWSOCNUM ADC_SOC_NUM6 + + #define ADC0COMPENSATE 2037.0f + #define ADC1COMPENSATE 2027.0f + +#endif + +#if defined (CHIP_3065HRPIRZ) || defined (CHIP_3065ARPIRZ) || defined (CHIP_3066MNPIRH) || \ + defined (CHIP_3065PNPIRH) || defined (CHIP_3065PNPIRE) || defined (CHIP_3065PNPIRA) + + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc1 + #define ADCRESIS_HANDLE g_adc2 + #define ADCUDC_HANDLE g_adc2 + #define ADCPTT_HANDLE g_adc2 + #define LED1_HANDLE g_gpio0 + #define LED2_HANDLE g_gpio0 + #define LED2_PIN GPIO_PIN_6 + #define LED1_PIN GPIO_PIN_7 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCRESISSOCNUM ADC_SOC_NUM1 + #define ADCUSOCNUM ADC_SOC_NUM8 + #define ADCWSOCNUM ADC_SOC_NUM8 + #define ADCUDCSOCNUM ADC_SOC_NUM14 + + #define ADC0COMPENSATE 2033.0f + #define ADC1COMPENSATE 2070.0f + +#endif + + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h new file mode 100644 index 00000000..2a6f38cc --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_ctlmode_config.h @@ -0,0 +1,73 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_ctlmode_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H app. + */ + + /* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_CTLMODECONFIG_H +#define McuMagicTag_MCS_CTLMODECONFIG_H + +#include "debug.h" +#include "typedefs.h" + +typedef enum { + FOC_STARTUP_IF = 0, + FOC_STARTUP_VF, + FOC_STARTUP_HFI +} MOTOR_STARTUPMODE_CONFIG; + +typedef enum { + FOC_OBSERVERTYPE_SMO1TH = 0, + FOC_OBSERVERTYPE_SMO1TH_PLL, + FOC_OBSERVERTYPE_SMO4TH, + FOC_OBSERVERTYPE_SMO4TH_PLL, + FOC_OBSERVERTYPE_LUNBORG, + FOC_OBSERVERTYPE_FLUX +} MOTOR_OBSERVERTYPE_CONFIG; + +typedef enum { + FOC_CONTROLMODE_SPEED = 0, + FOC_CONTROLMODE_TORQUE +} MOTOR_CONTROLMODE_CONFIG; + +typedef enum { + FOC_CURQAXISPID_PARAMS = 0, + FOC_CURDAXISPID_PARAMS, + FOC_SPDPID_PARAMS +} MOTOR_PID_SET; + +typedef enum { + MOTOR_PARAMS_BASE = 0, + MOTOR_PARAMS_SPECIAL, + MOTOR_PARAMS_BOARD +} MOTOR_PARAMS_SET; + +typedef enum { + CUST_SPEED_ADJUST = 0, + HOST_SPEED_ADJUST +} MODE_ADSPEED_CONFIG; + +typedef enum { + CONNECTING = 0, + CONNECTED, + DISCONNECT +} UART_STATUS; + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h new file mode 100644 index 00000000..783bf214 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_motor_process.h @@ -0,0 +1,45 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.h + * @author MCU Algorithm Team + * @brief This file provides motor sample functions declaration for ECMCU105H board. + */ +#ifndef McuMagicTag_MCS_MOTOR_PROCESS_H +#define McuMagicTag_MCS_MOTOR_PROCESS_H + +/** + * @brief phase sequence. + */ +typedef enum { + PHASE_U = 0, + PHASE_V, + PHASE_W, + PHASE_MAX_NUM +} MCS_PhaseEnum; + +/** + * @brief key state. + */ +typedef enum { + KEY_DOWN = 0, + KEY_UP = 1, +} KEY_State; + +int MotorMainProcess(void); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h new file mode 100644 index 00000000..19510c78 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_status.h @@ -0,0 +1,188 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_status.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_STATUS_H +#define McuMagicTag_MCS_STATUS_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "typedefs.h" +#include "mcs_assert.h" + +/* Typedef definitions ------------------------------------------------------------------------- */ +/** + * @brief System status define + */ +typedef union { + unsigned short all; + struct { + unsigned short cmdStart : 1; /**< Indicates that a start system command has been received. */ + unsigned short cmdStop : 1; /**< Indicates that a stop system command has been received. */ + unsigned short isRunning : 1; /**< Indicates that the system is running (enable signal) */ + unsigned short sysError : 1; /**< Indicates that the system reports an error. */ + unsigned short poweron : 1; /**< Indicates that the power-on initialization phase is complete. */ + unsigned short capcharge : 1; /**< Indicates that the bootstrap capacitor charging phase is complete. */ + unsigned short adczero : 1; /**< The current sampling point is reset to zero after power-on. */ + } Bit; +} SysStatusReg; + +/** + * @brief Get status of Bit cmdStart. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStart(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStart == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStart. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStartSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 1; +} + +/** + * @brief Clear Bit cmdStart. + * @param handle System status register handle. + * @retval None. + */ +static inline void SysCmdStartClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 0; +} + +/** + * @brief Get status of Bit cmdStop. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStop(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStop == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 1; +} + +/** + * @brief Clear Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 0; +} + +/** + * @brief Get status of Bit isRunning. + * @param sysStatus System status register handle. + * @retval Status of Bit isRunning. + */ +static inline bool SysIsRunning(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.isRunning == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 1; +} + +/** + * @brief Clear Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 0; +} + +/** + * @brief Get status of Bit sysError. + * @param sysStatus System status register handle. + * @retval Status of Bit sysError. + */ +static inline bool SysIsError(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.sysError == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 1; +} + +/** + * @brief Clear Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 0; +} + +#endif diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h new file mode 100644 index 00000000..19e1f89f --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/inc/mcs_user_config.h @@ -0,0 +1,120 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_user_config.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of user config parameters. + */ +#ifndef McuMagicTag_MCS_CONFIG_H +#define McuMagicTag_MCS_CONFIG_H + +#include "debug.h" +#include "typedefs.h" + +#define SMO4TH + +#define SYSTICK_PERIOD_US 500u /* systick period. */ + +#define INV_CAP_CHARGE_MS 3u /* Capacitor charging time. */ + +#define INV_VOLTAGE_BUS 24.0f /* Bus voltage, V. */ + +#define CTRL_CURR_PERIOD 0.0001f /* carrier ISR period, 100us. */ +#define CTRL_SYSTICK_PERIOD 0.0005f /* systick control period, 500us. */ + +/* Duty of sample window, the real time is 0.06*50us = 3us. */ +#define SAMPLE_WINDOW_DUTY 0.06f + +/* Duty of sample point shift as flip point, the real time is 0.008*50us = 0.4us. */ +#define SAMPLE_POINT_SHIFT 0.008f + +/* Sampling resistance 200mOhm 0.0013295 */ +#define ADC_CURR_COFFI 0.0013295f /* 3.3/4096/3.03/0.2 pga: 3.03, 200mohm. */ + +#define APT_U APT0_BASE /* Base address of U phase APT module. */ +#define APT_V APT1_BASE /* Base address of V phase APT module. */ +#define APT_W APT2_BASE /* Base address of W phase APT module. */ + +/* FOSMO */ +#define FOSMO_GAIN 4.0f /* SMO gain */ +#define FOSMO_LAMBDA 2.0f /* SMO coefficient of cut-off frequency, its value = lambda * we. */ +#define FOSMO_EMF_CUTOFF_FREQ 2.0f /* SMO back emf cutoff frequency. */ +#define SPEED_FILTER_CUTOFF_FREQUENCY 40.0f /* SMO speed cutoff frequency of speed filter. */ +#define FOSMO_PLL_BDW 30.0f /* SMO PLL bandwidth. */ + +/* SMO4TH */ +#define SMO4TH_PLL_BDW 30.0f /* SMO4TH PLL Bandwidth. */ +#define SMO4TH_KD 300.0f /* SMO4TH parameters KD. */ +#define SMO4TH_KQ 600.0f /* SMO4TH parameters KQ. */ +#define SMO4TH_SPD_FILTER_CUTOFF_FREQ 40.0f /* SMO4TH speed cutoff frequency of speed filter. */ + +/* User_Commond */ +#define CTRL_IF_CURR_AMP_A 0.8f /* IF control current amplitude. */ +#define USER_TARGET_SPD_HZ 30.0f /* User-defined target speed value. */ +#define USER_SWITCH_SPDBEGIN_HZ 30.0f /* Start of handover interval. */ +#define USER_SWITCH_SPDEND_HZ (USER_SWITCH_SPDBEGIN_HZ + 3.0f) /* End of handover period. */ +#define USER_MAX_SPD_HZ 24.0f /* User-defined maximum speed value. */ +#define USER_MIN_SPD_HZ 5.0f /* User-defined minimum speed value. */ +#define USER_SPD_SLOPE 50.0f /* slope of velocity change. */ +#define USER_CURR_SLOPE (CTRL_IF_CURR_AMP_A * 10.0f) /* Current change slope. */ + +/* PID PARAMS */ +#define CURRQAXIS_KP 5.023202f /* Current loop Q axis Kp. */ +#define CURRQAXIS_KI 20612.84f /* Current loop Q axis Ki. */ +#define CURRDAXIS_KP 3.477114f /* Current loop D axis Kp. */ +#define CURRDAXIS_KI 20612.84f /* Current loop D axis Ki. */ +/* Current loop PID output lower limit. */ +#define CURR_LOWERLIM (-INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.98f) +/* Current loop PID output upper limit. */ +#define CURR_UPPERLIM (INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.98f) + +#define SPD_KP 0.00505f /* Speed loop Kp. */ +#define SPD_KI 0.012f /* Speed loop Ki. */ +#define SPD_LOWERLIM (-0.105f) /* Speed loop PID output lower limit. */ +#define SPD_UPPERLIM 0.105f /* Speed loop PID output upper limit. */ + +/* MOTOR PARAMS */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift. */ +/* mtrPsif & mtrJ parameter is not used in this project, temporarily set to 0. */ +// #define MOTORPARAM_DEFAULTS { \ +// .mtrNp = 7, \ +// .mtrRs = 5.1f, \ +// .mtrLd = 0.00133f, \ +// .mtrLq = 0.00133f, \ +// .mtrPsif = 0.0f, \ +// .mtrJ = 0.0f, \ +// .maxElecSpd = 180.25f, \ +// .maxCurr = 0.105f, \ +// .busVolt = INV_VOLTAGE_BUS, \ +// } + +// // GIM4310-10 +#define MOTORPARAM_DEFAULTS { \ + .mtrNp = 14, \ + .mtrRs = 1.046f, \ + .mtrLd = 0.000344f, \ + .mtrLq = 0.000344f, \ + .mtrPsif = 0.0f, \ + .mtrJ = 0.0f, \ + .maxElecSpd = 24.0f, \ + .maxCurr = 0.8f, \ + .busVolt = INV_VOLTAGE_BUS, \ +} +/* Bus voltage sampling conversion factor. */ +#define ADC_UDC_COFFI 0.01289f /* 0.01289 = 3.3/4096*192/12. */ + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c new file mode 100644 index 00000000..99766bdf --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.c @@ -0,0 +1,43 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.c + * @author MCU Algorithm Team + * @brief This file contains protection common api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt.h" +#include "mcs_assert.h" + +/** + * @brief Safty-pulse-off function execution to turn off all the power devices. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void ProtSpo_Exec(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /**< Turn off all the six power devices of the inverter. */ + for (unsigned int i = 0; i < MOTOR_PHASE_NUMBER; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_ForcePWMOutputLow(aptx); + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h new file mode 100644 index 00000000..104a5dec --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_cmm.h @@ -0,0 +1,136 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.h + * @author MCU Algorithm Team + * @brief This file contains protection function common data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_CMM_H +#define McuMagicTag_MCS_PROT_CMM_H + +#include "typedefs.h" +#include "apt_ip.h" + +/* Macro definitions --------------------------------------------------------------------------- */ +#define MOTOR_PHASE_NUMBER (3) + +#define PROT_VAL_THRESHOLD_NUMS (4) +#define PROT_VAL_THRESHOLD_0 (0) +#define PROT_VAL_THRESHOLD_1 (1) +#define PROT_VAL_THRESHOLD_2 (2) +#define PROT_VAL_THRESHOLD_3 (3) + +#define PROT_LIMIT_TIME_NUMS (3) +#define PROT_LIMIT_TIME_0 (0) +#define PROT_LIMIT_TIME_1 (1) +#define PROT_LIMIT_TIME_2 (2) + +#define MOTOR_PHASE_NUMBER (3) + +/**< Motor error status definition. */ +typedef union { + int all; + struct { + unsigned short overCurrErr : 1; /**< Indicates that phase current(s) is over protected value. */ + unsigned short overVoltErr : 1; /**< Indicates that dc-link voltage is over protected value. */ + unsigned short lowerVoltErr : 1; /**< Indicates that dc-link voltage is lower than protected value */ + unsigned short overIpmTempErr : 1; /**< Indicates that IPM temperature is over protected value. */ + unsigned short revRotErr : 1; /**< Indicates that motor negtive direction. */ + unsigned short motorStalling : 1; /**< Indicates that rotor is stalling. */ + unsigned short overMotorTempErr : 1; /**< Indicates that three phase currents is out-of-balance. */ + unsigned short posSnsrCommsErr : 1; /**< Indicates that position sensor communication is lost with MCU. */ + unsigned short posSnsrFuncErr : 1; /**< Indicates that position sensor reports function error. */ + unsigned short posSnsrCalibrErr : 1; /**< Indicates that position sensor fails to calibrate itself. */ + unsigned short currOutOfBalance : 1; /**< Indicates that the rotor is reverse rotation.*/ + unsigned short phsOpenErr : 1; /**< Indicates that phase winding(s) is open. */ + unsigned short phsU : 1; /**< Indicates that u phase fails when phsOpenErr occurs. */ + unsigned short phsV : 1; /**< Indicates that v phase fails when phsOpenErr occurs. */ + unsigned short phsW : 1; /**< Indicates that w phase fails when phsOpenErr occurs. */ + unsigned short multiPhs : 1; /**< Indicates that multi-phases fail when phsOpenErr occurs.*/ + } Bit; +} MotorErrStatusReg; + +/**< Protection Status Bit Definition */ +typedef enum { + OCP_ERR_BIT, + OVP_ERR_BIT, + LVP_ERR_BIT, + OTP_IPM_ERR_BIT, + OTP_MOTOR_ERR_BIT, + STALLING_ERR_BIT, + CURR_OUT_BALANCE_ERR_BIT, + POS_COMMS_ERR_BIT, + POS_FUNC_ERR_BIT, + POS_CALIB_ERR_BIT, + REV_ROT_ERR_BIT, + PHS_OPEN_ERR_BIT, + PHS_U_ERR_BIT, + PHS_V_ERR_BIT, + PHS_W_ERR_BIT, + PHS_MULTI_ERR_BIT, +} PROT_ErrBit; + +/**< Motor error protection level. */ +typedef enum { + PROT_LEVEL_0 = 0, + PROT_LEVEL_1, + PROT_LEVEL_2, + PROT_LEVEL_3, + PROT_LEVEL_4 /**< The greater level number, the severe error is. */ +} PROT_Level; + +/** + * @brief Obtains the status of a bit of data. + * @param data data. + * @param bits Number of digits. + * @retval Bit status. + */ +static inline bool GetBit(int data, unsigned short bit) +{ + bool ret; + ret = ((data >> bit) & 1); + return ret; +} + +/** + * @brief Sets the status of a bit of data. + * @param data data. + * @param bit The setted bit. + * @retval None. + */ +static inline void SetBit(int *data, unsigned char bit) +{ + *data |= (1 << bit); +} + +/** + * @brief Clear the status of a bit of data. + * @param data data. + * @param bit The Clear bit. + * @retval None. + */ +static inline void ClearBit(int *data, unsigned char bit) +{ + *data &= ~(1 << bit); +} + +/**< Protection action. */ +void ProtSpo_Exec(APT_RegStruct **aptAddr); + +#endif diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c new file mode 100644 index 00000000..e97876b7 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.c @@ -0,0 +1,137 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.c + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Get motor over current error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overCurrErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor lower dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.lowerVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Ipm temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overIpmTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Motor temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overMotorTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor stalling error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.motorStalling) { + return true; + } else { + return false; + } +} + +/** + * @brief Clear the motor error status. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + /* Clear the motor error status. */ + motorProt->motorErrStatus.all = 0x00; + OCP_Clear(&motorProt->ocp); + OVP_Clear(&motorProt->ovp); + LVP_Clear(&motorProt->lvp); + OTP_Clear(&motorProt->otp); +} + +/** + * @brief Motor protection function initialization. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void MotorProt_Init(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + motorProt->motorErrStatus.all = 0x00; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h new file mode 100644 index 00000000..365110e1 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user.h @@ -0,0 +1,54 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.h + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_H +#define McuMagicTag_MCS_PROT_USER_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_curr_prot.h" +#include "mcs_dc_volt_prot.h" +#include "mcs_temp_prot.h" +#include "mcs_motor_stalling.h" +#include "typedefs.h" + +typedef struct { + MotorErrStatusReg motorErrStatus; /**< Motor error status. */ + OCP_Handle ocp; /**< Over current protection. */ + OVP_Handle ovp; /**< Over dc-link voltage protection. */ + LVP_Handle lvp; /**< Lower dc-link voltage protection. */ + OTP_Handle otp; /**< Over IPM temperature protection. */ + STP_Handle stall; /**< Motor stalling protection. */ +} MotorProtStatus_Handle; + +void MotorProt_Init(MotorProtStatus_Handle *motorProt); + +/**< Inquiry motor error status */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus); +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus); +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h new file mode 100644 index 00000000..c0564a22 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/common/mcs_prot_user_config.h @@ -0,0 +1,125 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user_config.h + * @author MCU Algorithm Team + * @brief This file contans user macro definition of the protection function. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_CONFIG_H +#define McuMagicTag_MCS_PROT_USER_CONFIG_H + +/* Macro definitions --------------------------------------------------------------------------- */ +/**< COMMON */ +/**< Peak phase current (A) of the motor or IPM under continuous operations. */ +#define PROT_MOTOR_RATED_CURR (1.5f) +/**< Only several continuous fault detection can trigger error status. */ +#define PROT_CNT_LIMIT (100) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define RECY_CNT_LIMIT (10000) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define OVER_VOLT_RECY_CNT_LIMIT (100) +/**< Only several contunuous none fault dectection can trigger elimination of error status. */ +#define LOWER_VOLT_RECY_CNT_LIMIT (100) + +/**< Over current protection */ +/**< Over current trigger value (A) when in level 1. */ +#define PROT_OVER_CURR_POW_DN1 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 2. */ +#define PROT_OVER_CURR_POW_DN2 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 3. */ +#define PROT_OVER_CURR_POW_DN3 (2.0f * PROT_MOTOR_RATED_CURR) +/**< Over current trigger value (A) when in level 4. */ +#define PROT_OVER_CURR_POW_OFF (2.0f * PROT_MOTOR_RATED_CURR) +#define PROT_OVER_CURR_RECY_DELTA (0.0035f) /**< Current gap (A) when recovers from protection status. */ +#define PROT_OVER_CURR_LIMIT1_TIME_SEC (30.0f) /**< 20% overload can last maximum time: 30 sec. */ +#define PROT_OVER_CURR_LIMIT2_TIME_SEC (10.0f) /**< 20% overload can last maximum time: 10 sec. */ +#define PROT_OVER_CURR_LIMIT3_TIME_SEC (2.0f) /**< 20% overload can last maximum time: 2 sec. */ + +/**< Over voltage protection */ +#define PROT_OVER_VOLT_BRK_ON1 (26.0f) /**<处于1级时,直流链路电压触发值(V)过高*/ +#define PROT_OVER_VOLT_BRK_ON2 (27.0f) /**< Over dc-link voltage trigger value (V) when in level 2. */ +#define PROT_OVER_VOLT_BRK_ON3 (28.0f) /**< Over dc-link voltage trigger value (V) when in level 3. */ +#define PROT_OVER_VOLT_BRK_ALL (30.0f) /**< Over dc-link voltage trigger value (V) when in level 4. */ +#define PROT_OVER_VOLT_RECY_DELTA (0.5f) /**<从保护状态恢复时的电压间隙(V)*/ +#define PROT_OVER_VOLT_LIMIT1_TIME_SEC (5.0f) /** 1; One-cycle mode: < 0.5 */ +#define POS_SNSR_IPD_INJ_PERIOD (4) + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c new file mode 100644 index 00000000..da4e56f8 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.c @@ -0,0 +1,267 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.c + * @author MCU Algorithm Team + * @brief This file contains current protecion api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_curr_prot.h" +#include "mcs_math.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over current protection function. + * @param ocp Over current protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OCP_Init(OCP_Handle *ocp, float ts) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ocp->ts = ts; + OCP_Clear(ocp); + + ocp->protCntLimit = PROT_CNT_LIMIT; + ocp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring four levels of current protection thresholds. */ + ocp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_CURR_POW_DN1; + ocp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_CURR_POW_DN2; + ocp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_CURR_POW_DN3; + ocp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_CURR_POW_OFF; + /* Configure the protection limit time. */ + ocp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_CURR_LIMIT1_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_CURR_LIMIT2_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_CURR_LIMIT3_TIME_SEC; + ocp->recyDelta = PROT_OVER_CURR_RECY_DELTA; +} + +/** + * @brief Over current protection detection. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + /* Calculate current amplitude. */ + ocp->currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + + /* Check if value goes over threshold for continuous cycles. */ + if (ocp->currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0]) { + ocp->protCnt = 0; + return; + } + + if (ocp->protCnt < ocp->protCntLimit) { + ocp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_3] && ocp->protLevel < PROT_LEVEL_4) { + ocp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_2] && ocp->protLevel < PROT_LEVEL_3) { + ocp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_1] && ocp->protLevel < PROT_LEVEL_2) { + ocp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_0] && ocp->protLevel < PROT_LEVEL_1) { + ocp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } +} + +/** + * @brief Over current protection execution. + * @param ocp Over current protection handle. + * @param idqRef DQ-axis current references. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(idqRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + + float id = idqRef->d; + float iq = idqRef->q; + float idqAmp = ocp->currAmp; + /* According to protect level, take corresponding action. */ + switch (ocp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + idqRef->d = 0.0f; + idqRef->q = 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_2]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_1]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_0]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } +} + +/** + * @brief Over current protection recovery. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @retval None. + */ +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overCurrErr) { + return; + } + + /* Calculate current amplitude. */ + float currAmp = ocp->currAmp; + + /* According to protection level, take corresponding recovery action. */ + switch (ocp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_3] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_3; + ocp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_2] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_2; + ocp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_1] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_1; + ocp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + } + } + break; + + /* level 0 */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overCurrErr = 0; + break; + + default: + break; + } +} + +/** + * @brief Over current protection error status clear. + * @param ocp Over current protection handle. + * @retval None. + */ +void OCP_Clear(OCP_Handle *ocp) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* Clear the history value. */ + ocp->protCnt = 0; + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + ocp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h new file mode 100644 index 00000000..e9916fe4 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_curr_prot.h @@ -0,0 +1,52 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.h + * @author MCU Algorithm Team + * @brief This file contains current protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_CURR_PROT_H +#define McuMagicTag_MCS_CURR_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_typedef.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float currAmp; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OCP_Handle; + +void OCP_Init(OCP_Handle *ocp, float ts); +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq); +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr); +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus); +void OCP_Clear(OCP_Handle *ocp); + +#endif diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c new file mode 100644 index 00000000..b0541a2e --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.c @@ -0,0 +1,495 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.c + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection api declaration. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_dc_volt_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over dc-link voltage protection function. + * @param ovp Over dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OVP_Init(OVP_Handle *ovp, float ts) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ovp->ts = ts; + OVP_Clear(ovp); + ovp->protCntLimit = PROT_CNT_LIMIT; + ovp->recyCntLimit = OVER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of overvoltage protection thresholds. */ + ovp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_VOLT_BRK_ON1; + ovp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_VOLT_BRK_ON2; + ovp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_VOLT_BRK_ON3; + ovp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_VOLT_BRK_ALL; + /* Configure the protection limit time. */ + ovp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_VOLT_LIMIT1_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_VOLT_LIMIT2_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_VOLT_LIMIT3_TIME_SEC; + ovp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Initilization lower dc-link voltage protection function. + * @param lvp Lower dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void LVP_Init(LVP_Handle *lvp, float ts) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + + lvp->ts = ts; + LVP_Clear(lvp); + + lvp->protCntLimit = PROT_CNT_LIMIT; + lvp->recyCntLimit = LOWER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of lower voltage protection thresholds. */ + lvp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_LOWER_VOLT_POW_DN1; + lvp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_LOWER_VOLT_POW_DN2; + lvp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_LOWER_VOLT_POW_DN3; + lvp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_LOWER_VOLT_POW_OFF; + /* Configure the protection limit time. */ + lvp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_LOWER_VOLT_LIMIT1_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_LOWER_VOLT_LIMIT2_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_LOWER_VOLT_LIMIT3_TIME_SEC; + lvp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Over dc-link voltage protection detection. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0]) { + ovp->protCnt = 0; + return; + } + + if (ovp->protCnt < ovp->protCntLimit) { + ovp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_3] && ovp->protLevel < PROT_LEVEL_4) { + ovp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_2] && ovp->protLevel < PROT_LEVEL_3) { + ovp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_1] && ovp->protLevel < PROT_LEVEL_2) { + ovp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_0] && ovp->protLevel < PROT_LEVEL_1) { + ovp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } +} + +/** + * @brief Lower dc-link voltage protection detection. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0]) { + lvp->protCnt = 0; + return; + } + + if (lvp->protCnt < lvp->protCntLimit) { + lvp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_3] && lvp->protLevel < PROT_LEVEL_4) { + lvp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_2] && lvp->protLevel < PROT_LEVEL_3) { + lvp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_1] && lvp->protLevel < PROT_LEVEL_2) { + lvp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_0] && lvp->protLevel < PROT_LEVEL_1) { + lvp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } +} + +/** + * @brief Over dc-link voltage protection execution. + * @param ovp Over dc-link voltage protection handle. + * @param duty Brake loop output duty (0-1). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(duty != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (ovp->protLevel) { + /* level 4: brake loop duty maximum. */ + case PROT_LEVEL_4: + *duty = PROT_OVER_VOLT_BRK_DUTY4; + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + break; + + /* level 3: brake loop duty level 3. */ + case PROT_LEVEL_3: + *duty = PROT_OVER_VOLT_BRK_DUTY2; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_2]) { + *duty = PROT_OVER_VOLT_BRK_DUTY3; + } + break; + + /* level 2: brake loop duty level 2. */ + case PROT_LEVEL_2: + *duty = PROT_OVER_VOLT_BRK_DUTY1; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_1]) { + *duty = PROT_OVER_VOLT_BRK_DUTY2; + } + break; + + /* level 1: brake loop duty level 1. */ + case PROT_LEVEL_1: + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_0]) { + *duty = PROT_OVER_VOLT_BRK_DUTY1; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection execution. + * @param lvp Lower dc-link voltage protection handle. + * @param spdRef Speed Reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (lvp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + *spdRef *= PROT_POW_DN1_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_0]) { + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection recovery. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (ovp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_3] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_3; + ovp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is less than threshold 2, level-2 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_2] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_2; + ovp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is less than threshold 1, level-1 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_1] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_1; + ovp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is less than threshold 0, level-0 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection recovery. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.lowerVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (lvp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the dc-link voltage is greater than threshold 3, level-3 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_3] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_3; + lvp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is greater than threshold 2, level-2 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_2] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_2; + lvp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is greater than threshold 1, level-1 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_1] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_1; + lvp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is greater than threshold 0, level-0 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.lowerVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection error status clear. + * @param ovp Over voltage protection handle. + * @retval None. + */ +void OVP_Clear(OVP_Handle *ovp) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* Clear the history value. */ + ovp->protCnt = 0; + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + ovp->timer = 0.0f; +} + +/** + * @brief Lower dc-link voltage protection error status clear. + * @param lvp Lower voltage protection handle. + * @retval None. + */ +void LVP_Clear(LVP_Handle *lvp) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* Clear the history value. */ + lvp->protCnt = 0; + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + lvp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h new file mode 100644 index 00000000..0435156a --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_dc_volt_prot.h @@ -0,0 +1,69 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.h + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_DC_VOLT_PROT_H +#define McuMagicTag_MCS_DC_VOLT_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low voltage level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OVP_Handle; + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from high voltage level to low. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} LVP_Handle; + +void OVP_Init(OVP_Handle *ovp, float ts); +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr); +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Clear(OVP_Handle *ovp); + +void LVP_Init(LVP_Handle *lvp, float ts); +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr); +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Clear(LVP_Handle *lvp); + +#endif diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c new file mode 100644 index 00000000..9dee4d2d --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.c @@ -0,0 +1,112 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.c + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_motor_stalling.h" +#include "mcs_prot_user_config.h" +#include "mcs_math.h" +#include "mcs_math_const.h" +#include "mcs_assert.h" + +/** + * @brief Initilization motor stalling protection function. + * @param stall Motor stalling handle. + * @param ts Ctrl period (s). + * @param currLimit The current amplitude that triggers fault. (A). + * @param spdLimit The speed amplitude that triggers fault. (Hz). + * @param timeLimit The threshold time that current amplitude over the limit (s). + * @retval None. + */ +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + MCS_ASSERT_PARAM(currLimit > 0.0f); + MCS_ASSERT_PARAM(spdLimit > 0.0f); + MCS_ASSERT_PARAM(timeLimit > 0.0f); + /* Configuring parameters for stalling detection. */ + stall->ts = ts; + /* Current threshold and speed threshold for stalling fault. */ + stall->currAmpLimit = currLimit; + stall->spdLimit = spdLimit; + stall->timeLimit = timeLimit; + stall->timer = 0.0f; +} + +/** + * @brief Motor stalling detection. + * @param stall Motor stalling handle. + * @param motorErrStatus Motor error status. + * @param spd Speed feedback (Hz). + * @param idq Dq-axis current feedback (A). + * @retval None. + */ +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(Abs(spd) >= 0.0f); + /* Calculate current amplitude. */ + float currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + float spdAbs = Abs(spd); + /* Check if value goes over threshold for continuous cycles. */ + if (currAmp < stall->currAmpLimit || spdAbs > stall->spdLimit) { + stall->timer = 0.0f; + return; + } + /* Time accumulation. */ + if (stall->timer < stall->timeLimit) { + stall->timer += stall->ts; + return; + } + motorErrStatus->Bit.motorStalling = 1; +} + +/** + * @brief Motor stalling protection execution. + * @param motorErrStatus Motor error status. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + if (motorErrStatus->Bit.motorStalling == 0) { + return; + } + + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + return; +} + +/** + * @brief Motor stalling protection error status clear. + * @param stall Motor stalling handle. + * @retval None. + */ +void STP_Clear(STP_Handle *stall) +{ + MCS_ASSERT_PARAM(stall != NULL); + stall->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h new file mode 100644 index 00000000..a1d1e4be --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_motor_stalling.h @@ -0,0 +1,45 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.h + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_MOTOR_STALLING_PROT_H +#define McuMagicTag_MCS_MOTOR_STALLING_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" +#include "mcs_typedef.h" + +typedef struct { + float currAmpLimit; /**< Feedback current higher than this value triggers fault. (A). */ + float spdLimit; /**< Feedback speed lower than this value triggers fault (Hz). */ + float timeLimit; /**< The threshold time that current and speed feedback over ranges (s). */ + float timer; /**< Timer to get speed and current over range time. */ + float ts; /**< Ctrl period (s). */ +} STP_Handle; + +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit); +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq); +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr); +void STP_Clear(STP_Handle *stall); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c new file mode 100644 index 00000000..184ba4a3 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.c @@ -0,0 +1,262 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.c + * @author MCU Algorithm Team + * @brief This file contains over temperature protection api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_temp_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over temperation protection function. + * @param otp Over temperature protection handle. + * @param ts Ctrl period. + * @retval None. + */ +void OTP_Init(OTP_Handle *otp, float ts) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + otp->ts = ts; + otp->protCntLimit = PROT_CNT_LIMIT; + otp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring the temperature protection threshold. */ + otp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_IPM_TEMP_POW_DN1; + otp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_IPM_TEMP_POW_DN2; + otp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_IPM_TEMP_POW_DN3; + otp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_IPM_TEMP_POW_OFF; + /* Configuring the protection limiting time. */ + otp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_TEMP_LIMIT1_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_TEMP_LIMIT2_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_TEMP_LIMIT3_TIME_SEC; + otp->recyDelta = PROT_OVER_IPM_TEMP_RECY_DELTA; + OTP_Clear(otp); +} + +/** + * @brief Over temperatre protection detection. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0]) { + otp->protCnt = 0; + ClearBit(&motorErrStatus->all, protBit); + return; + } + + if (otp->protCnt < otp->protCntLimit) { + otp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_3] && otp->protLevel < PROT_LEVEL_4) { + otp->protLevel = PROT_LEVEL_4; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_2] && otp->protLevel < PROT_LEVEL_3) { + otp->protLevel = PROT_LEVEL_3; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_1] && otp->protLevel < PROT_LEVEL_2) { + otp->protLevel = PROT_LEVEL_2; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_0] && otp->protLevel < PROT_LEVEL_1) { + otp->protLevel = PROT_LEVEL_1; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } +} + +/** + * @brief Over temperature protection execution. + * @param otp Over temperature protection handle. + * @param spdRef Speed reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (otp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + /* Reducte motor speed to level 2 */ + *spdRef *= PROT_POW_DN1_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + case PROT_LEVEL_1: + /* Reducte motor speed to level 0 */ + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_0]) { + /* level 1: derate speed reference. */ + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection recovery. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param temp Temperature (celsius). + * @retval None. + */ +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* If not under error state, just return without any operation. */ + if (otp->protLevel == PROT_LEVEL_0) { + motorErrStatus->all &= (~(1 >> protBit)); + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (otp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the temperature is less than threshold 3, level-3 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_3] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_3; + otp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the temperature is less than threshold 2, level-2 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_2] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_2; + otp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the temperature is less than threshold 1, level-1 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_1] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_1; + otp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the temperature is less than threshold 0, level-0 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + } + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection error status clear. + * @param otp Over temperature protection handle. + * @retval None. + */ +void OTP_Clear(OTP_Handle *otp) +{ + MCS_ASSERT_PARAM(otp != NULL); + /* Clear the history value. */ + otp->protCnt = 0; + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + otp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h new file mode 100644 index 00000000..2b9d99a7 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/protection/mcs_temp_prot.h @@ -0,0 +1,49 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.h + * @author MCU Algorithm Team + * @brief his file contains over temperature protection api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_TEMP_PROT_H +#define McuMagicTag_MCS_TEMP_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float ts; + float timer; + PROT_Level protLevel; +} OTP_Handle; + +void OTP_Init(OTP_Handle *otp, float ts); +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr); +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Clear(OTP_Handle *otp); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/readme.md b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/readme.md new file mode 100644 index 00000000..98b2a068 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/readme.md @@ -0,0 +1,10 @@ +# pmsm_sensorless_2shunt_foc + +**【功能描述】** ++ 基于ECMCU105H/ECBMCU201MPC单板的单电机双电阻采样Foc应用 + +**【环境要求】** ++ 所有单板电源改制为演示用的12V低压,电机选用Gimbal GBM2804H-100T + +**【IDE配置方法】** ++ chipConfig中的Sample栏目里面选中pmsm sensorless 2shunt foc示例,然后点击生成代码即可 diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c new file mode 100644 index 00000000..9fc8afac --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_carrier.c @@ -0,0 +1,144 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.c + * @author MCU Algorithm Team + * @brief This file provides carrier interrupt application for motor control. + */ + +#include "mcs_carrier.h" +#include "mcs_math.h" +#include "typedefs.h" +#include "mcs_assert.h" +#include "mcs_user_config.h" +#include "mcs_ctlmode_config.h" + +/** + * @brief Synchronous rotation coordinate system angle. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_SyncCoorAngle(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* Synchronous rotation coordinate system angle. */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + /* Current ramp angle is 0. */ + if (mtrCtrl->startup.stage == STARTUP_STAGE_CURR) { + mtrCtrl->axisAngle = 0; + } else if (mtrCtrl->startup.stage == STARTUP_STAGE_SPD) { /* IF control phase angle self-addition. */ + mtrCtrl->axisAngle = IF_CurrAngleCalc(&mtrCtrl->ifCtrl, mtrCtrl->spdRefHz); + } else if (mtrCtrl->startup.stage == STARTUP_STAGE_SWITCH) { /* Switch Angle */ + mtrCtrl->axisAngle = mtrCtrl->smo.elecAngle; + } + break; + + case FSM_RUN: + mtrCtrl->axisAngle = mtrCtrl->smo.elecAngle; + break; + + default: + mtrCtrl->axisAngle = 0; + break; + } +} + +/** + * @brief PWM waveform setting and sampling point setting for a single resistors and dual resistors. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_PwmAdcSet(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SampleMode sampleMode = mtrCtrl->sampleMode; + /* Set the duty cycle according to the sampling mode. */ + if (sampleMode == DUAL_RESISTORS) { + SVPWM_Exec(&mtrCtrl->sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvw); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvw, &mtrCtrl->dutyUvw); + } else if (sampleMode == SINGLE_RESISTOR) { + R1SVPWM_Exec(&mtrCtrl->r1Sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + /* The ADC sampling point position needs to be set based on the phase shift of a single resistors. */ + mtrCtrl->setADCTriggerTimeCb(mtrCtrl->r1Sv.samplePoint[0] * mtrCtrl->aptMaxcntCmp, \ + mtrCtrl->r1Sv.samplePoint[1] * mtrCtrl->aptMaxcntCmp); + } +} + +/** + * @brief Carrier interrupt function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UvwAxis *currUvw = &mtrCtrl->currUvw; + AlbeAxis *currAlbe = &mtrCtrl->iabFbk; + AlbeAxis *vab = &mtrCtrl->vabRef; + SampleMode sampleMode = mtrCtrl->sampleMode; + /* sample mode verify */ + if (sampleMode > SINGLE_RESISTOR || mtrCtrl->setADCTriggerTimeCb == NULL) { + return; + } + /* param verify */ + if (mtrCtrl->setPwmDutyCb == NULL || mtrCtrl->readCurrUvwCb == NULL) { + return; + } + /* Read the three-phase current value. */ + mtrCtrl->readCurrUvwCb(currUvw); + /* Clark Calc */ + ClarkeCalc(currUvw, currAlbe); + /* Smo observation */ + if (mtrCtrl->obserType == FOC_OBSERVERTYPE_SMO1TH) { + /* Smo observation */ + FOSMO_Exec(&mtrCtrl->smo, currAlbe, vab, mtrCtrl->spdRefHz); + } else if (mtrCtrl->obserType == FOC_OBSERVERTYPE_SMO4TH) { + /* Smo4th observation */ + SMO4TH_Exec(&mtrCtrl->smo4th, currAlbe, vab); + mtrCtrl->smo.spdEst = mtrCtrl->smo4th.spdEst; + mtrCtrl->smo.elecAngle = mtrCtrl->smo4th.elecAngle; + } + /* Synchronization angle */ + MCS_SyncCoorAngle(mtrCtrl); + + /* Park transformation */ + ParkCalc(currAlbe, mtrCtrl->axisAngle, &mtrCtrl->idqFbk); + + /* statemachine */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + case FSM_RUN: + CURRCTRL_Exec(&mtrCtrl->currCtrl, &mtrCtrl->vdqRef, mtrCtrl->smo.spdEst, 0); + InvParkCalc(&mtrCtrl->vdqRef, mtrCtrl->axisAngle, vab); + MCS_PwmAdcSet(mtrCtrl); + break; + + case FSM_CAP_CHARGE: + case FSM_CLEAR: + case FSM_IDLE: + mtrCtrl->smo4th.spdEst = 0.0f; + break; + + default: + vab->alpha = 0.0f; + vab->beta = 0.0f; + MCS_PwmAdcSet(mtrCtrl); + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c new file mode 100644 index 00000000..f754d001 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/src/mcs_motor_process.c @@ -0,0 +1,951 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.c + * @author MCU Algorithm Team + * @brief This file provides motor application. + * @details Single FOC application based on the ECMCU105H/ECBMCU201MPC board + * 1) Motor model is Gimbal GBM2804H-100T. + * 2) Select the pmsm sensorless 2shunt foc example in the sample column + of chipConfig and click Generate Code. + * 3) It's power supply must be changed to 12V. + */ +#include "main.h" +#include "mcs_user_config.h" +#include "mcs_math.h" +#include "hmi_module.h" +#include "mcs_ctlmode_config.h" +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_math_const.h" +#include "mcs_motor_process.h" +#include "mcs_chip_config.h" +#include + +/*------------------------------- Macro Definition -----------------------------------------------*/ +#define US_PER_MS 1000 +#define ANGLE_RANGE_ABS 65536 +#define ANGLE_360_F 65536.0f /* 0 - 65536 indicates 0 to 360. */ +#define APT_FULL_DUTY 1.0f +#define TEMP_3 3.0f +#define TEMP_15 15.0f +#define TEMP_30 30.0f +#define TEMP_45 45.0f +#define TEMP_60 60.0f +#define TEMP_RES_15 78.327f +#define TEMP_RES_30 36.776f +#define TEMP_RES_45 18.301f +#define TEMP_RES_60 9.607f +#define CNT_10 10 +#define CNT_5000 5000 +#define LEVEL_4 4 +#define MOTOR_START_DELAY 2 +#define ADC_READINIT_DELAY 1 +#define ADC_READINIT_TIMES 20 +#define ADC_TRIMVALUE_MIN 1800.0f +#define ADC_TRIMVALUE_MAX 2200.0f +/*------------------------------- Param Definition -----------------------------------------------*/ +/* Motor parameters. */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift */ +static MOTOR_Param g_motorParam = MOTORPARAM_DEFAULTS; +static APT_RegStruct* g_apt[PHASE_MAX_NUM] = {APT_U, APT_V, APT_W}; +/* Motor control handle */ +static MTRCTRL_Handle g_mc = {0}; + +/* Motor speed loop PI param. */ +static void SPDCTRL_InitWrapper(SPDCTRL_Handle *spdHandle, float ts) +{ + /* Speed loop param assignment. */ + PI_Param spdPi = { + .kp = SPD_KP, + .ki = SPD_KI, + .lowerLim = SPD_LOWERLIM, + .upperLim = SPD_UPPERLIM, + }; + /* Speed loop param init. */ + SPDCTRL_Init(spdHandle, &g_motorParam, spdPi, ts); +} + +/* Motor current Loop PI param. */ +static void CURRCTRL_InitWrapper(CURRCTRL_Handle *currHandle, DqAxis *idqRef, DqAxis *idqFbk, float ts) +{ + /* Axis-D current loop param assignment. */ + PI_Param dCurrPi = { + .kp = CURRDAXIS_KP, + .ki = CURRDAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Axis-Q current loop param assignment. */ + PI_Param qCurrPi = { + .kp = CURRQAXIS_KP, + .ki = CURRQAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Current loop param init. */ + CURRCTRL_Init(currHandle, &g_motorParam, idqRef, idqFbk, dCurrPi, qCurrPi, ts); +} + +/* First order smo param. */ +static void FOSMO_InitWrapper(FOSMO_Handle *fosmo, float ts) +{ + /* Smo param assignment. */ + FOSMO_Param fosmoParam = { + .gain = FOSMO_GAIN, + .lambda = FOSMO_LAMBDA, + .fcEmf = FOSMO_EMF_CUTOFF_FREQ, + .fcLpf = SPEED_FILTER_CUTOFF_FREQUENCY, + .pllBdw = FOSMO_PLL_BDW, + }; + /* Init smo param. */ + FOSMO_Init(fosmo, fosmoParam, &g_motorParam, ts); +} + +/* Smo4th param. */ +static void SMO4TH_InitWrapper(SMO4TH_Handle *smo4TH) +{ + /* Smo4th param assignment. */ + SMO4TH_Param smo4thParam = { + .kd = SMO4TH_KD, + .kq = SMO4TH_KQ, + .pllBdw = SMO4TH_PLL_BDW, + .fcLpf = SMO4TH_SPD_FILTER_CUTOFF_FREQ, + }; + /* Init smo param. */ + SMO4TH_Init(smo4TH, smo4thParam, &g_motorParam, CTRL_CURR_PERIOD); +} + +/*------------------------------- Function Definition -----------------------------------------------*/ +/** + * @brief Initialzer of system tick. + * @param mtrCtrl Motor control struct handle. + * @retval None. + */ +static void TimerTickInit(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysTickCnt = 0; + mtrCtrl->msTickNum = US_PER_MS / SYSTICK_PERIOD_US; + mtrCtrl->capChargeTickNum = (INV_CAP_CHARGE_MS * US_PER_MS / SYSTICK_PERIOD_US); +} + +/** + * @brief Init motor control task. + * @retval None. + */ +static void TSK_Init(void) +{ + g_mc.motorStateFlag = 0; + g_mc.uartHeartDetCnt = 0; + g_mc.uartTimeStamp = 0; + g_mc.stateMachine = FSM_IDLE; + g_mc.currCtrlPeriod = CTRL_CURR_PERIOD; /* Init current controller */ + g_mc.aptMaxcntCmp = g_apt0.waveform.timerPeriod; + g_mc.sampleMode = DUAL_RESISTORS; + g_mc.obserType = FOC_OBSERVERTYPE_SMO4TH; /* Init foc observe mode */ + g_mc.controlMode = FOC_CONTROLMODE_SPEED; /* Init motor control mode */ + g_mc.adcCurrCofe = ADC_CURR_COFFI; + g_mc.spdAdjustMode = CUST_SPEED_ADJUST; + g_mc.uartConnectFlag = DISCONNECT; + g_mc.spdCmdHz = USER_MIN_SPD_HZ; /* Motor initialization speed */ + + g_mc.adc0Compensate = ADC0COMPENSATE; /* Phase-u current init adc shift trim value */ + g_mc.adc1Compensate = ADC1COMPENSATE; /* Phase-w current init adc shift trim value */ + + IF_Init(&g_mc.ifCtrl, CTRL_IF_CURR_AMP_A, USER_CURR_SLOPE, CTRL_SYSTICK_PERIOD, CTRL_CURR_PERIOD); + RMG_Init(&g_mc.spdRmg, CTRL_SYSTICK_PERIOD, USER_SPD_SLOPE); /* Init speed slope */ + MtrParamInit(&g_mc.mtrParam, g_motorParam); + + TimerTickInit(&g_mc); + if (g_mc.sampleMode == DUAL_RESISTORS) { + SVPWM_Init(&g_mc.sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3); /* Dual resistors SVPWM init. */ + } else if (g_mc.sampleMode == SINGLE_RESISTOR) { + /* Single resistor SVPWM init. */ + R1SVPWM_Init(&g_mc.r1Sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3, SAMPLE_POINT_SHIFT, SAMPLE_WINDOW_DUTY); + } + + SPDCTRL_InitWrapper(&g_mc.spdCtrl, CTRL_SYSTICK_PERIOD); + CURRCTRL_InitWrapper(&g_mc.currCtrl, &g_mc.idqRef, &g_mc.idqFbk, CTRL_CURR_PERIOD); + FOSMO_InitWrapper(&g_mc.smo, CTRL_CURR_PERIOD); + SMO4TH_InitWrapper(&g_mc.smo4th); + + STARTUP_Init(&g_mc.startup, USER_SWITCH_SPDBEGIN_HZ, USER_SWITCH_SPDBEGIN_HZ + TEMP_3); + + MotorProt_Init(&g_mc.prot); /* Init protect state comond */ + OCP_Init(&g_mc.prot.ocp, CTRL_CURR_PERIOD); + OVP_Init(&g_mc.prot.ovp, CTRL_SYSTICK_PERIOD); + LVP_Init(&g_mc.prot.lvp, CTRL_SYSTICK_PERIOD); + OTP_Init(&g_mc.prot.otp, CTRL_SYSTICK_PERIOD); + STP_Init(&g_mc.prot.stall, CTRL_SYSTICK_PERIOD, PROT_STALLING_CURR_AMP_LIMIT, + PROT_STALLING_SPD_LIMIT, PROT_STALLING_TIME_LIMIT); +} + +/** + * @brief Clear historical values of all controller before start-up. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ClearBeforeStartup(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* The initial angle is 0. */ + mtrCtrl->axisAngle = 0; + + mtrCtrl->spdRefHz = 0.0f; + /* The initial dq-axis reference current is 0. */ + mtrCtrl->idqRef.d = 0.0f; + mtrCtrl->idqRef.q = 0.0f; + + mtrCtrl->vdqRef.d = 0.0f; + mtrCtrl->vdqRef.q = 0.0f; + /* Clear Duty Cycle Value. The initial duty cycle is 0.5. */ + mtrCtrl->dutyUvwLeft.u = 0.5f; + mtrCtrl->dutyUvwLeft.v = 0.5f; + mtrCtrl->dutyUvwLeft.w = 0.5f; + mtrCtrl->dutyUvwRight.u = 0.5f; + mtrCtrl->dutyUvwRight.v = 0.5f; + mtrCtrl->dutyUvwRight.w = 0.5f; + + mtrCtrl->prot.motorErrStatus.all = 0x00; + + RMG_Clear(&mtrCtrl->spdRmg); /* Clear the history value of speed slope control */ + CURRCTRL_Clear(&mtrCtrl->currCtrl); + IF_Clear(&mtrCtrl->ifCtrl); + SPDCTRL_Clear(&mtrCtrl->spdCtrl); + FOSMO_Clear(&mtrCtrl->smo); + SMO4TH_Clear(&mtrCtrl->smo4th); + STARTUP_Clear(&mtrCtrl->startup); + R1SVPWM_Clear(&mtrCtrl->r1Sv); + + OTP_Clear(&mtrCtrl->prot.otp); + OCP_Clear(&mtrCtrl->prot.ocp); + OVP_Clear(&mtrCtrl->prot.ovp); + LVP_Clear(&mtrCtrl->prot.lvp); +} + +/** + * @brief To set the comparison value of the IGBT single-resistance ADC sampling trigger position. + * @param aptx The APT register struct handle. + * @param cntCmpA A Count compare reference of time-base counter. + * @param cntCmpB B Count compare reference of time-base counter. + * @param maxCntCmp Maximum Comparison Value + * @retval None. + */ +static void MCS_SetAdcCompareR1(APT_RegStruct *aptx, unsigned short cntCmpA, + unsigned short cntCmpB, unsigned short maxCntCmp) +{ + unsigned short tmp; + /* Sets the A Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpA), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_A, tmp); + /* Sets the B Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpB), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_B, tmp); +} + +/** + * @brief Open the three-phase lower pipe. + * @param aptAddr Three-phase APT address pointer. + * @param maxDutyCnt Max duty count. + * @retval None. + */ +static void AptTurnOnLowSidePwm(APT_RegStruct **aptAddr, unsigned short maxDutyCnt) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(maxDutyCnt != 0); + unsigned short dutyCnt; + dutyCnt = (unsigned short)(maxDutyCnt * APT_FULL_DUTY); + /* Open the three-phase lower pipe */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_C, dutyCnt); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_D, dutyCnt); + } +} + +/** + * @brief Enable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputEnable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Enable three-phase pwm output */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_UNSET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_UNSET; + } +} + +/** + * @brief Disable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputDisable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Disable three-phase pwm output. */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_SET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_SET; + DCL_APT_ForcePWMOutputLow(aptx); + } +} + +/** + * @brief Smo IF angle difference calculation. + * @param smoElecAngle Smo electrical angle. + * @param ifCtrlAngle IF control angle. + * @retval signed short angle difference. + */ +static float SmoIfAngleDiffCalc(float smoElecAngle, float ifCtrlAngle) +{ + float diff = AngleSub(smoElecAngle, ifCtrlAngle); + /* Smo IF angle difference calculation */ + return diff; +} + +/** + * @brief Construct a new mcs startupswitch object. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_StartupSwitch(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + STARTUP_Handle *startup = &mtrCtrl->startup; + DqAxis *idqRef = &mtrCtrl->idqRef; + float iftargetAmp = mtrCtrl->ifCtrl.targetAmp; + float spdRefHz = mtrCtrl->spdRefHz; + + switch (startup->stage) { + case STARTUP_STAGE_CURR: + if (mtrCtrl->ifCtrl.curAmp >= iftargetAmp) { + /* Stage change */ + idqRef->q = iftargetAmp; + startup->stage = STARTUP_STAGE_SPD; + } else { + /* current amplitude increase */ + idqRef->q = IF_CurrAmpCalc(&mtrCtrl->ifCtrl); + spdRefHz = 0.0f; + } + break; + case STARTUP_STAGE_SPD: + /* current frequency increase */ + if (Abs(spdRefHz) >= startup->spdBegin) { + /* Stage change */ + startup->stage = STARTUP_STAGE_SWITCH; + TrigVal localTrigVal; + TrigCalc(&localTrigVal, SmoIfAngleDiffCalc(mtrCtrl->smo.elecAngle, mtrCtrl->ifCtrl.angle)); + idqRef->d = 0.0f; + mtrCtrl->spdCtrl.spdPi.integral = iftargetAmp * localTrigVal.cos; + } else { + /* Speed rmg */ + spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + } + break; + + case STARTUP_STAGE_SWITCH: + /* Switch from IF to SMO */ + spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + idqRef->q = SPDCTRL_Exec(&mtrCtrl->spdCtrl, mtrCtrl->spdRefHz, mtrCtrl->smo.spdEst); + /* Transitional stage, if current reference speed > critical speed, change to next stage */ + if (spdRefHz >= startup->spdBegin + TEMP_3) { + /* Stage change */ + mtrCtrl->stateMachine = FSM_RUN; + } + break; + + default: + break; + } + mtrCtrl->spdRefHz = spdRefHz; +} + +/** + * @brief Pre-processing of motor status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void MotorStatePerProc(SysStatusReg *statusReg, volatile FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* Get system status */ + if (SysIsError(statusReg)) { + *stateMachine = FSM_FAULT; + } + if (SysGetCmdStop(statusReg)) { + SysCmdStopClr(statusReg); + *stateMachine = FSM_STOP; + } +} + +/** + * @brief Check over current status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckOverCurrentState(SysStatusReg *statusReg, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check systerm error status */ + if (SysIsError(statusReg) == false) { + *stateMachine = FSM_IDLE; + } +} + +/** + * @brief Check bootstrap capacitor charge time. + * @param mtrCtrl The motor control handle. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckBootstrpCapChargeTime(MTRCTRL_Handle *mtrCtrl, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + mtrCtrl->sysTickCnt++; + /* check bootstrap capacitor charge time */ + if (mtrCtrl->sysTickCnt == mtrCtrl->capChargeTickNum) { + *stateMachine = FSM_CLEAR; + } +} + +/** + * @brief Check systerm cmd start signal. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckSysCmdStart(MTRCTRL_Handle *mtrCtrl, + APT_RegStruct **aptAddr, + SysStatusReg *statusReg, + FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check start cmd */ + if (SysGetCmdStart(statusReg)) { + SysRunningSet(statusReg); + SysCmdStartClr(statusReg); + mtrCtrl->sysTickCnt = 0; + *stateMachine = FSM_CAP_CHARGE; + /* Preparation for charging the bootstrap capacitor. */ + AptTurnOnLowSidePwm(aptAddr, mtrCtrl->aptMaxcntCmp); + /* Out put pwm */ + MotorPwmOutputEnable(aptAddr); + } +} + +/** + * @brief System timer tick task. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void TSK_SystickIsr(MTRCTRL_Handle *mtrCtrl, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + SysStatusReg *statusReg = &mtrCtrl->statusReg; + FsmState *stateMachine = &mtrCtrl->stateMachine; + mtrCtrl->msTickCnt++; + /* Pre-processing of motor status. */ + MotorStatePerProc(statusReg, stateMachine); + /* statemachine */ + switch (*stateMachine) { + case FSM_IDLE: + /* Set smo estimate speed before motor start-up */ + g_mc.smo.spdEst = 0.0f; + CheckSysCmdStart(mtrCtrl, aptAddr, statusReg, stateMachine); + break; + case FSM_CAP_CHARGE: + /* Bootstrap Capacitor Charging Timing */ + CheckBootstrpCapChargeTime(mtrCtrl, stateMachine); + break; + /* Clear parameter before start */ + case FSM_CLEAR: + ClearBeforeStartup(mtrCtrl); + *stateMachine = FSM_STARTUP; + break; + case FSM_STARTUP: + MCS_StartupSwitch(mtrCtrl); + break; + case FSM_RUN: + /* Speed ramp control */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + /* Speed loop control */ + mtrCtrl->idqRef.q = SPDCTRL_Exec(&mtrCtrl->spdCtrl, mtrCtrl->spdRefHz, mtrCtrl->smo.spdEst); + break; + case FSM_STOP: + mtrCtrl->spdRefHz = 0.0f; + MotorPwmOutputDisable(aptAddr); + SysRunningClr(statusReg); + *stateMachine = FSM_IDLE; + break; + case FSM_FAULT: /* Overcurrent state */ + CheckOverCurrentState(statusReg, stateMachine); + break; + default: + break; + } +} + +/** + * @brief Read the ADC initialize bias trim value. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void TrimInitAdcShiftValue(MTRCTRL_Handle *mtrCtrl) +{ + float adc0SampleTemp = 0.0f; /* Current bias value for temp store */ + float adc1SampleTemp = 0.0f; + float adc0TempSum = 0.0f; + float adc1TempSum = 0.0f; /* Current bias sum value for 20 times */ + float adcSampleTimes = 0.0f; /* ADC sample times */ + for (int i = 0; i < ADC_READINIT_TIMES; i++) { + adc0SampleTemp = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + adc1SampleTemp = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + BASE_FUNC_DELAY_US(200); /* 200 is delay count, delay 200us triger adc sampling */ + if (adc0SampleTemp > 1000.0f && adc1SampleTemp > 1000.0f) { + adcSampleTimes++; + adc0TempSum += adc0SampleTemp; + adc1TempSum += adc1SampleTemp; + } + } + if (adcSampleTimes < 1.0f) { + adcSampleTimes = 1.0f; /* Prevent divide-by-zero errors */ + } + adc0SampleTemp = adc0TempSum / adcSampleTimes; + adc1SampleTemp = adc1TempSum / adcSampleTimes; + /* Force convert to float */ + mtrCtrl->adc0Compensate = (float) adc0SampleTemp; + mtrCtrl->adc1Compensate = (float) adc1SampleTemp; + /* The normal value scope: 1800 < adc0Compensate < 2200 */ + if(g_mc.adc0Compensate < ADC_TRIMVALUE_MIN || g_mc.adc0Compensate > ADC_TRIMVALUE_MAX \ + || g_mc.adc1Compensate < ADC_TRIMVALUE_MIN || g_mc.adc1Compensate > ADC_TRIMVALUE_MAX) { + DBG_PRINTF("ADC trim value error,please reset!"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + } + adcSampleTimes = 0; + adc0TempSum = 0; + adc1TempSum = 0; +} + +/** + * @brief Read the ADC current sampling value. + * @param CurrUvw Three-phase current. + * @retval None. + */ +static void ReadCurrUvw(UvwAxis *CurrUvw) +{ + MCS_ASSERT_PARAM(CurrUvw != NULL); + float adc0 = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + float adc1 = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + /* Convert adc sample value to current value */ + CurrUvw->u = -(adc0 - g_mc.adc0Compensate) * g_mc.adcCurrCofe; + CurrUvw->w = -(adc1 - g_mc.adc1Compensate) * g_mc.adcCurrCofe; + CurrUvw->v = -CurrUvw->u - CurrUvw->w; +} + +/** + * @brief Setting the APT Output Duty Cycle. + * @param aptx APT register base address. + * @param leftDuty Left duty cycle. + * @param rightDuty Right duty cycle. + * @retval None. + */ +static void SetPwmDuty(APT_Handle *aptx, float leftDuty, float rightDuty) +{ + MCS_ASSERT_PARAM(aptx != NULL); + MCS_ASSERT_PARAM(leftDuty > 0); + MCS_ASSERT_PARAM(rightDuty > 0); + unsigned short maxPeriodCnt = aptx->waveform.timerPeriod; + unsigned short cntCmpLeftEdge = (unsigned short)(leftDuty * maxPeriodCnt); + unsigned short cntCmpRightEdge = (unsigned short)(rightDuty * maxPeriodCnt); + /* avoid overflowing */ + cntCmpLeftEdge = (cntCmpLeftEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpLeftEdge; + cntCmpRightEdge = (cntCmpRightEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpRightEdge; + HAL_APT_SetPWMDuty(aptx, cntCmpLeftEdge, cntCmpRightEdge); +} + +/** + * @brief Duty Cycle Setting. + * @param dutyUvwLeft Three-phase left duty cycle. + * @param dutyUvwRight Three-phase right duty cycle. + * @retval None. + */ +static void SetPwmDutyCp(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight) +{ + MCS_ASSERT_PARAM(dutyUvwLeft != NULL); + MCS_ASSERT_PARAM(dutyUvwRight != NULL); + /* Setting the Three-Phase Duty Cycle */ + SetPwmDuty(&g_apt0, dutyUvwLeft->u, dutyUvwRight->u); + SetPwmDuty(&g_apt1, dutyUvwLeft->v, dutyUvwRight->v); + SetPwmDuty(&g_apt2, dutyUvwLeft->w, dutyUvwRight->w); +} + +/** + * @brief To set the ADC sampling trigger comparison value. + * @param cntCmpSOCA Soca Compare Count Value. + * @param cntCmpSOCB Socb Compare Count Value. + * @retval None. + */ +static void SetADCTriggerTime(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB) +{ + MCS_SetAdcCompareR1(g_apt[PHASE_U], cntCmpSOCA, cntCmpSOCB, g_mc.aptMaxcntCmp); +} + +/** + * @brief Temprature table, the temprature detect range is 15 ~ 60 degree. + * @param tempResisValue Temperature sensor resistance. + * @retval None. + */ +static float TempTable(float tempResisValue) +{ + float boardTemp = 0.0f; + /* Temperatures between 15 and 30. */ + if (tempResisValue > TEMP_RES_30 && tempResisValue <= TEMP_RES_15) { + boardTemp = TEMP_15 + (TEMP_30 - TEMP_15) * (TEMP_RES_15 - tempResisValue) / (TEMP_RES_15 - TEMP_RES_30); + } else if (tempResisValue > TEMP_RES_45 && tempResisValue <= TEMP_RES_30) { /* Temperature between 30 and 45. */ + boardTemp = TEMP_30 + (TEMP_45 - TEMP_30) * (TEMP_RES_30 - tempResisValue) / (TEMP_RES_30 - TEMP_RES_45); + } else if (tempResisValue > TEMP_RES_60 && tempResisValue <= TEMP_RES_45) { /* Temperature between 45 and 50. */ + boardTemp = TEMP_45 + (TEMP_60 - TEMP_45) * (TEMP_RES_45 - tempResisValue) / (TEMP_RES_45 - TEMP_RES_60); + } else if (tempResisValue <= TEMP_RES_60) { + boardTemp = TEMP_60; /* If temperature is over 60, set temperature as 60. */ + } else if (tempResisValue >= TEMP_RES_15) { + boardTemp = TEMP_15; /* If temperature is lower 15, set temperature as 15. */ + } + return boardTemp; +} + +/** + * @brief Read power board temperature and udc. + * @retval None. + */ +static void ReadBoardTempAndUdc(void) +{ + HAL_ADC_SoftTrigSample(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + HAL_ADC_SoftTrigSample(&ADCUDC_HANDLE, ADCUDCSOCNUM); + BASE_FUNC_DELAY_US(CNT_10); /* Delay 10 us. */ + /* Force convert to float type. */ + float resisAdcValue = (float)HAL_ADC_GetConvResult(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + /* 10 / (x + 10) * 3.3 = resisAdcValue / 4096 * 3.3, x is resisValue, 10kohm is resistor divider value. */ + float resisValue = (4096.0f * 10.0f - 10.0f * resisAdcValue) / resisAdcValue; + g_mc.powerBoardTemp = TempTable(resisValue); + g_mc.udc = ((float)HAL_ADC_GetConvResult(&ADCUDC_HANDLE, ADCUDCSOCNUM)) * ADC_UDC_COFFI; +} + +/** + * @brief Execut abnormal feedback speed protect motion. + * @retval None. + */ +static void SpdFbkErrorProt_Exec(void) +{ + if (g_mc.prot.motorErrStatus.Bit.motorStalling == 0 && + g_mc.prot.motorErrStatus.Bit.overVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.lowerVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.overIpmTempErr == 0 && + g_mc.prot.motorErrStatus.Bit.overCurrErr == 0) { + g_mc.prot.motorErrStatus.Bit.revRotErr = 1; + /* If revRotErr, execute protect motion. */ + ProtSpo_Exec(g_apt); + } +} + +/** + * @brief Execut nan data protect motion. + * @retval None. + */ +static void NanDataDetect(void) +{ + static short errorSpdStatus = 0; + /* Detect the nan observer speed or current value. */ + if (isnan(g_mc.smo.spdEst) || isnan(g_mc.idqRef.q)) { + errorSpdStatus++; + } else { + errorSpdStatus = 0; + } + /* If the data is nan & continuous counting value is over 500 times, execute protect motion. + the detect time is 500 * 500us = 250ms. */ + if (errorSpdStatus >= 500) { + errorSpdStatus = 0; + SpdFbkErrorProt_Exec(); + } +} + +/** + * @brief Check abnormal feedback speed. + * @retval None. + */ +static void CheckSpdFbkStatus(void) +{ + static short errorCurrStatus = 0; + static short errorDeltaSpdStatus = 0; + NanDataDetect(); + if (g_mc.stateMachine == FSM_RUN) { + /* Detect the abnormal idq feedback current. */ + if (Abs(g_mc.idqRef.q - g_mc.idqFbk.q) >= CTRL_IF_CURR_AMP_A) { + errorCurrStatus++; + } else { + errorCurrStatus = 0; + } + /* Detect the abnormal feedback speed, the normal speed is > 0, if smo.spdEst < -10 && + delta speed error > USER_MIN_SPD_HZ + 10.0f at FSM_RUN stage, set the motor motion as error */ + if (g_mc.smo.spdEst < -10.0f && (g_mc.spdRefHz - g_mc.smo.spdEst > USER_MIN_SPD_HZ + 10.0f)) { + errorDeltaSpdStatus++; + } + } + /* Execute protect motion if count over 500 times, this error status caused by abnormal speed + or cabnormal urrent feedback, the detect time is 500 * 500us = 250ms. */ + if (errorCurrStatus >= 500) { + errorCurrStatus = 0; + SpdFbkErrorProt_Exec(); + } + /* This error statu caused by motor stalling, the detect time is 2 * 500us = 1ms. */ + if (errorDeltaSpdStatus >= 2) { + errorDeltaSpdStatus = 0; + g_mc.prot.motorErrStatus.Bit.motorStalling = 1; + } +} + +/** + * @brief Check Potentiometer Value callback function. + * @param param The TIMER_Handle. + * @retval None. + */ +void CheckPotentiometerValueCallback(void *param) +{ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + static float potentiomitorAdcValue = 0.0f; + static float spdCmdHz = 0; + static float spdCmdHzLast = USER_MIN_SPD_HZ; /* 35.0 is spdCmdHzLast init value */ + HAL_ADC_SoftTrigSample(&ADCPTT_HANDLE, ADCPTTSOCNUM); + BASE_FUNC_DELAY_US(10); /* Delay 10 us. */ + potentiomitorAdcValue = (float)HAL_ADC_GetConvResult(&ADCPTT_HANDLE, ADCPTTSOCNUM); + /* 4045.0 is adc sample max value of potentiomitor, convert max spd to 180.25Hz */ + spdCmdHz = potentiomitorAdcValue / 4045.0f * USER_MAX_SPD_HZ; + if (Abs(spdCmdHzLast - spdCmdHz) < 1.0f) { /* Ignore changes less than 1. */ + return; + } + spdCmdHzLast = spdCmdHz; + if (spdCmdHz < USER_MIN_SPD_HZ) { /* 35.0 is spdCmdHz lower limit */ + spdCmdHz = USER_MIN_SPD_HZ; /* 35.0 is spdCmdHz lower limit */ + } + if (spdCmdHz > g_mc.mtrParam.maxElecSpd) { /* spdCmdHz upper limit */ + spdCmdHz = g_mc.mtrParam.maxElecSpd; /* spdCmdHz upper limit */ + } + if (g_mc.spdAdjustMode == CUST_SPEED_ADJUST) { + g_mc.spdCmdHz = spdCmdHz; + } +} + +/** + * @brief System timer ISR for Motor Statemachine CallBack function. + * @param param The systick timer handle. + * @retval None. + */ +void MotorStatemachineCallBack(void *param) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + /* Read power board temprature and voltage. */ + ReadBoardTempAndUdc(); + /* Motor speed loop state machine. */ + TSK_SystickIsr(&g_mc, g_apt); + + /* Motor error speed feedback check. */ + CheckSpdFbkStatus(); + /* Motor stalling detect. */ + STP_Det_ByCurrSpd(&g_mc.prot.stall, &g_mc.prot.motorErrStatus, g_mc.smo.spdEst, g_mc.idqFbk); + STP_Exec(&g_mc.prot.motorErrStatus, g_apt); + + /* Motor over voltage detect. */ + OVP_Det(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + OVP_Exec(&g_mc.prot.ovp, &g_mc.spdRefHz, g_apt); + OVP_Recy(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* Motor lower voltage detect. */ + LVP_Det(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + LVP_Exec(&g_mc.prot.lvp, &g_mc.spdRefHz, g_apt); + LVP_Recy(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* Power board over temperature detect. */ + OTP_Det(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + OTP_Exec(&g_mc.prot.otp, &g_mc.spdRefHz, g_apt); + OTP_Recy(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + + /* If protect level == 4, set motor state as stop. */ + if (g_mc.prot.ovp.protLevel == LEVEL_4 || g_mc.prot.lvp.protLevel == LEVEL_4 \ + || g_mc.prot.otp.protLevel == LEVEL_4) { + SysCmdStopSet(&g_mc.statusReg); + } +} + +/** + * @brief The carrier ISR wrapper function. + * @param aptHandle The APT handle. + * @retval None. + */ +void MotorCarrierProcessCallback(void *aptHandle) +{ + MCS_ASSERT_PARAM(aptHandle != NULL); + BASE_FUNC_UNUSED(aptHandle); + /* the carrierprocess of motor */ + MCS_CarrierProcess(&g_mc); + /* Over current protect */ + if (g_mc.stateMachine == FSM_RUN || g_mc.stateMachine == FSM_STARTUP) { + OCP_Det(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus, g_mc.idqFbk); + OCP_Exec(&g_mc.prot.ocp, &g_mc.idqFbk, g_apt); /* Execute over current protect motion */ + if (g_mc.prot.ocp.protLevel < LEVEL_4) { + OCP_Recy(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus); + } + } +} + +/** + * @brief Event interrupt callback function of APT module. + * @param para APT module handle. + * @retval None. + */ +void MotorSysErrCallback(void *para) +{ + MCS_ASSERT_PARAM(para != NULL); + APT_Handle *handle = (APT_Handle *)para; + /* The IPM overcurrent triggers and disables the three-phase PWM output. */ + MotorPwmOutputDisable(g_apt); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_U], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_V], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_W], APT_OC_COMBINE_EVENT_A1); + /* Status setting error */ + SysErrorSet(&g_mc.statusReg); + DBG_PRINTF("APT error! \r\n"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + BASE_FUNC_UNUSED(handle); +} + +/** + * @brief Init motor controller's data structure. + * @retval None. + */ +static void InitSoftware(void) +{ + /* Initializing motor control param */ + TSK_Init(); + /* Read phase-uvw current */ + g_mc.readCurrUvwCb = ReadCurrUvw; + g_mc.setPwmDutyCb = SetPwmDutyCp; + g_mc.setADCTriggerTimeCb = SetADCTriggerTime; +} + +/** + * @brief Config the KEY func. + * @param handle The GPIO handle. + * @retval None. + */ +static KEY_State Key_StateRead(GPIO_Handle *handle) +{ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + BASE_FUNC_DELAY_MS(30); /* delay 30ms for deshake */ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + while (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + } + return KEY_DOWN; + } + } + return KEY_UP; +} + +/** + * @brief Control motor start and stop state by key func. + * @param param The GPIO handle. + * @retval None. + */ +void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + if (Key_StateRead(handle) == KEY_DOWN) { + if (g_mc.motorStateFlag == 0) { /* start motor */ + g_mc.motorStateFlag = 1; + SysCmdStartSet(&g_mc.statusReg); + } else if (g_mc.motorStateFlag == 1) { /* stop motor */ + g_mc.motorStateFlag = 0; + SysCmdStopSet(&g_mc.statusReg); + } + } +} + +/** + * @brief User application main entry function. + * @retval BSP_OK. + */ +int MotorMainProcess(void) +{ + unsigned int tickNum1Ms = 2; /* 1ms tick */ + static unsigned int tickCnt1Ms = 0; + unsigned int tickNum500Ms = 1000; /* 500ms tick */ + static unsigned int tickCnt500Ms = 0; + SystemInit(); + HMI_Init(); /* Init uart interrupt */ + HAL_TIMER_Start(&g_timer0); + HAL_TIMER_Start(&g_timer1); + + /* Disable PWM output before startup. */ + + MotorPwmOutputDisable(g_apt); + /* Software initialization. */ + InitSoftware(); + /* Start the PWM clock. */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + /* System Timer clock. */ + BASE_FUNC_DELAY_MS(ADC_READINIT_DELAY); + TrimInitAdcShiftValue(&g_mc); + BASE_FUNC_DELAY_MS(MOTOR_START_DELAY); + while (1) { + /* Cycling send data to host */ + HMI_Process_Tx(&g_mc); + if (g_mc.msTickCnt - tickCnt1Ms >= tickNum1Ms) { + tickCnt1Ms = g_mc.msTickCnt; + /* User Code 1ms Event */ + HMI_Process_Rx(&g_mc); + /* User Code 1ms Event */ + } + + if (g_mc.msTickCnt - tickCnt500Ms >= tickNum500Ms) { + if (SysIsError(&g_mc.statusReg) != true) { + /* LED toggle in normal status. */ + HAL_GPIO_TogglePin(&LED1_HANDLE, LED1_PIN); + } + tickCnt500Ms = g_mc.msTickCnt; + } + } + return 0; +} diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c new file mode 100644 index 00000000..7c4f7525 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.c @@ -0,0 +1,718 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of cust process interface. + */ + +#include "cust_process.h" +#include "mcs_ctlmode_config.h" +#include "mcs_math_const.h" +#include "mcs_user_config.h" +#include "mcs_assert.h" +#include "main.h" +#include "uart_module.h" +#include "mcs_mtr_param.h" +/* Macro definitions --------------------------------------------------------------------------- */ +/* Constant value. */ +#define CONST_VALUE_60 60.0f /* Constant value 60. */ +#define CONST_VALUE_DIV_1000 0.001f /* Constant value 1/1000. */ + +/* Data array index. */ +#define DATA_SEGMENT_ONE 0 /* First element of the data segment */ +#define DATA_SEGMENT_TWO 1 /* Second element of the data segment */ +#define DATA_SEGMENT_THREE 2 /* Third element of the data segment */ +#define DATA_SEGMENT_FOUR 3 /* Fourth element of the data segment */ +#define CUSTACKCODELEN 10 /* Ack code length */ + +/* Command code. */ +#define SET_PID_KP 0x01 /* Set Pid Kp Command Params */ +#define SET_PID_KI 0x02 /* Set Pid Ki Command Params */ +#define SET_PID_LIMIT 0x03 /* Set Pid limit Command Params */ + +#define SET_SMO1TH_PLL_BDW 0x01 /* Set Smo1th Pll BandWidth Command Params */ +#define SET_SMO1TH_SPDFLITER_FC 0x02 /* Set Smo1th Fc Command Params */ +#define SET_SMO1TH_FILCOMPANGLE 0x03 /* Set Smo1th FillComp Command Params */ + +#define SET_SMO4TH_KD 0x01 /* Set Smo4th Kd Command Params */ +#define SET_SMO4TH_KP 0x02 /* Set Smo4th Kq Command Params */ + +#define SET_SPD_COMMAND_HZ 0x01 /* Set Target Speed Command Params */ +#define SET_SPD_RMG_SLOPE 0x02 /* Set Speed Slope Command Params */ + +#define SET_MAX_ELEC_SPD 0x01 /* Set Max Motor Speed Command Params */ +#define SET_MOTOR_NUM_OF_PAIRS 0x02 /* Set Motor Command Params */ + +#define SET_MOTOR_RES_OF_STATOR 0x01 /* Set Motor Res Command Params */ +#define SET_MOTOR_DAXIS_INDUCTANCE 0x02 /* Set Motor Daxis Inductance Command Params */ +#define SET_MOTOR_QAXIS_INDUCTANCE 0x03 /* Set Motor Qaxis Inductance Command Params */ + +#define SET_SVPWM_VOLTAGE_PER_UNIT 0x01 /* Set Svpwm Voltage Params */ +#define SET_ADC_CURRENT_SAMPLE_COFE 0x02 /* Set Adc coffe Params */ +#define SET_CURRENT_LOOP_CONTROL_PERIOD 0x03 /* Set Current loop period Command Params */ + +#define SET_IF_TARGET_CURRENT_VALUE 0x01 /* Set If Target Params */ +#define SET_INCREMENT_OF_IF_CURRENT 0x02 /* Set If Step Command Params */ +#define SET_SPEED_RING_BEGIN_SPEED 0x03 /* Set If to Smo Start Speed Command Params */ + +static unsigned char ackCode = 0; +static unsigned char g_uartTxBuf[CUSTACKCODELEN] = {0}; + +/** + * @brief Set observer type. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverType(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + if (funcCode == FOC_OBSERVERTYPE_SMO1TH) { + ackCode = 0X01; + mtrCtrl->obserType = FOC_OBSERVERTYPE_SMO1TH; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->obserType); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH) { + ackCode = 0X02; + mtrCtrl->obserType = FOC_OBSERVERTYPE_SMO4TH; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->obserType); + } +} + +/** + * @brief Set pid parameter ack code. + * @param funcCode Received data funccode. + */ +static unsigned char SetPidAckCode(int funcCode) +{ + switch (funcCode) { + /* Set current loop D-Axis PID parameter ack code. */ + case FOC_CURDAXISPID_PARAMS: + ackCode = 0xE0; + break; + /* Set current loop Q-Axis PID parameter ack code. */ + case FOC_CURQAXISPID_PARAMS: + ackCode = 0xE3; + break; + /* Set speed loop PID parameter ack code. */ + case FOC_SPDPID_PARAMS: + ackCode = 0xE6; + break; + default: + break; + } + return ackCode; +} + +/** + * @brief Set pid parameters. + * @param pidHandle The pid control handle. + * @param rxData Receive buffer + */ +static void SetPidParams(PID_Handle *pidHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + switch (cmdCode) { + case SET_PID_KP: /* Set the P parameter. */ + PID_SetKp(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_KP), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_KI: /* Set the I parameter. */ + PID_SetKi(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_KI), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_LIMIT: /* Set the pid limit. */ + PID_SetLimit(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, (unsigned char)(ackCode + SET_PID_LIMIT), rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor pid parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorPidParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_CURDAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.dAxisPi, rxData); /* Set Curr loop Daxis pid params */ + } else if (funcCode == FOC_CURQAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.qAxisPi, rxData); /* Set Curr loop Qaxis pid params */ + mtrCtrl->currCtrl.dAxisPi.upperLimit = mtrCtrl->currCtrl.qAxisPi.upperLimit; + mtrCtrl->currCtrl.dAxisPi.lowerLimit = mtrCtrl->currCtrl.qAxisPi.lowerLimit; + } else if (funcCode == FOC_SPDPID_PARAMS) { + SetPidParams(&mtrCtrl->spdCtrl.spdPi, rxData); /* Set Speed loop params */ + } +} + +/** + * @brief Set first order sliding mode observer parameters. + * @param smoHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo1thParams(FOSMO_Handle *smoHandle, CUSTDATATYPE_DEF *rxData) +{ + smoHandle->kSmo = rxData->data[DATA_SEGMENT_TWO].typeF; + ackCode = 0X09; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->kSmo); +} + +/** + * @brief Set first order sliding mode observer's phase-locked loop parameters. + * @param smoHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo1thPLLParams(FOSMO_Handle *smoHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + float pllBdw = 0.0f; + switch (cmdCode) { + case SET_SMO1TH_PLL_BDW: /* Set the bandwidth. */ + pllBdw = rxData->data[DATA_SEGMENT_THREE].typeF; + smoHandle->pll.pi.kp = 2.0f * pllBdw; /* kp = 2.0f * pllBdw */ + smoHandle->pll.pi.ki = pllBdw * pllBdw; /* ki = pllBdw * pllBdw */ + ackCode = 0X0A; + CUST_AckCode(g_uartTxBuf, ackCode, pllBdw); + break; + case SET_SMO1TH_SPDFLITER_FC: /* Set the cutoff frequency. */ + smoHandle->spdFilter.fc = rxData->data[DATA_SEGMENT_THREE].typeF; + smoHandle->spdFilter.a1 = 1.0f / (1.0f + DOUBLE_PI * smoHandle->spdFilter.fc * CTRL_CURR_PERIOD); + smoHandle->spdFilter.b1 = 1.0f - smoHandle->spdFilter.a1; + ackCode = 0X0B; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->spdFilter.fc); + break; + case SET_SMO1TH_FILCOMPANGLE: /* Set the compensation angle. */ + smoHandle->filCompAngle = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0C; + CUST_AckCode(g_uartTxBuf, ackCode, smoHandle->filCompAngle); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set fourth order sliding mode observer parameters. + * @param smo4thHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo4thParams(SMO4TH_Handle *smo4thHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SMO4TH_KD: /* Set d axis gain. */ + smo4thHandle->kd = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0D; + CUST_AckCode(g_uartTxBuf, ackCode, smo4thHandle->kd); + break; + case SET_SMO4TH_KP: /* Set q axis gain. */ + smo4thHandle->kq = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0E; + CUST_AckCode(g_uartTxBuf, ackCode, smo4thHandle->kq); + break; + default: + break; + } +} + +/** + * @brief Set fourth order sliding mode observer's phase-locked loop parameters. + * @param smo4thHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverSmo4thPLLParams(SMO4TH_Handle *smo4thHandle, CUSTDATATYPE_DEF *rxData) +{ + float pllBdw = rxData->data[DATA_SEGMENT_TWO].typeF; + smo4thHandle->pll.pi.kp = (2.0f) * pllBdw; /* kp = 2.0f * pllBdw */ + smo4thHandle->pll.pi.ki = pllBdw * pllBdw; + ackCode = 0X11; + CUST_AckCode(g_uartTxBuf, ackCode, pllBdw); +} + +/** + * @brief Set observer parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_OBSERVERTYPE_SMO1TH) { + SetObserverSmo1thParams(&mtrCtrl->smo, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO1TH_PLL) { + SetObserverSmo1thPLLParams(&mtrCtrl->smo, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH) { + SetObserverSmo4thParams(&mtrCtrl->smo4th, rxData); + } else if (funcCode == FOC_OBSERVERTYPE_SMO4TH_PLL) { + SetObserverSmo4thPLLParams(&mtrCtrl->smo4th, rxData); + } +} + +/** + * @brief Set motor speed and speed slope. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorSpdAndSlope(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SPD_COMMAND_HZ: /* Set target speed(hz). */ + mtrCtrl->spdCmdHz = rxData->data[DATA_SEGMENT_THREE].typeF * mtrCtrl->mtrParam.mtrNp / CONST_VALUE_60; + /* Judgement the value > 0.00001, make sure denominator != 0. */ + if (rxData->data[DATA_SEGMENT_FOUR].typeF > 0.00001f) { + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_FOUR].typeF * CTRL_SYSTICK_PERIOD; + } + ackCode = 0X16; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->spdCmdHz); + break; + case SET_SPD_RMG_SLOPE: /* Set speed slope. */ + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_THREE].typeF * CTRL_SYSTICK_PERIOD; + ackCode = 0X17; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor base parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorBaseParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MAX_ELEC_SPD: /* Set max electric speed. */ + mtrParamHandle->maxElecSpd = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrParamHandle->mtrNp; + ackCode = 0X18; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_MOTOR_NUM_OF_PAIRS: /* Set the number of motor pole pairs. */ + mtrParamHandle->mtrNp = (unsigned short)(rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = 0X19; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrParamHandle->mtrNp); + break; + default: + break; + } +} + +/** + * @brief Set motor special parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorSpecialParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MOTOR_RES_OF_STATOR: /* Set the resistor of stator. */ + mtrParamHandle->mtrRs = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1A; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrRs); + break; + case SET_MOTOR_DAXIS_INDUCTANCE: /* Set the d axis inductance. */ + mtrParamHandle->mtrLd = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1B; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLd); + break; + case SET_MOTOR_QAXIS_INDUCTANCE: /* Set the q axis inductance. */ + mtrParamHandle->mtrLq = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1C; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLq); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor board parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetMotorBoardParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SVPWM_VOLTAGE_PER_UNIT: /* Set svpwm voltage per unit. */ + mtrCtrl->sv.voltPu = rxData->data[DATA_SEGMENT_THREE].typeF * ONE_DIV_SQRT3; + mtrCtrl->currCtrl.outLimit = mtrCtrl->sv.voltPu * ONE_DIV_SQRT3; + ackCode = 0X1D; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_ADC_CURRENT_SAMPLE_COFE: /* Set adc current sample cofeature. */ + mtrCtrl->adcCurrCofe = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1E; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->adcCurrCofe); + break; + case SET_CURRENT_LOOP_CONTROL_PERIOD: /* Set current loop control period. */ + mtrCtrl->currCtrlPeriod = 1 / rxData->data[DATA_SEGMENT_THREE].typeF * CONST_VALUE_DIV_1000; + ackCode = 0X1F; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == MOTOR_PARAMS_BASE) { + SetMotorBaseParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_SPECIAL) { + SetMotorSpecialParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_BOARD) { + SetMotorBoardParams(mtrCtrl, rxData); + } +} + +/** + * @brief Motor start. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStart(MTRCTRL_Handle *mtrCtrl) +{ + if (mtrCtrl->stateMachine != FSM_RUN) { + SysCmdStartSet(&mtrCtrl->statusReg); /* start motor. */ + mtrCtrl->motorStateFlag = 1; + ackCode = 0X24; /* send ackcode to host. */ + CUST_AckCode(g_uartTxBuf, ackCode, 1); + } +} + +/** + * @brief Motor stop. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStop(MTRCTRL_Handle *mtrCtrl) +{ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + ackCode = 0X25; + CUST_AckCode(g_uartTxBuf, ackCode, 0); +} + +/** + * @brief Motor state reset. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorReset(MTRCTRL_Handle *mtrCtrl) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_SoftReset(); +} + +/** + * @brief Set IF-Startup parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetStartupIFParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_IF_TARGET_CURRENT_VALUE: /* Set I/F start up target current value. */ + mtrCtrl->ifCtrl.targetAmp = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X26; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.targetAmp); + break; + case SET_INCREMENT_OF_IF_CURRENT: /* Set increment of I/F start up current. */ + mtrCtrl->ifCtrl.stepAmp = mtrCtrl->ifCtrl.targetAmp / rxData->data[DATA_SEGMENT_THREE].typeF * + CTRL_SYSTICK_PERIOD; + ackCode = 0X27; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.stepAmp); + break; + case SET_SPEED_RING_BEGIN_SPEED: /* Set speed ring begin speed. */ + mtrCtrl->startup.spdBegin = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrCtrl->mtrParam.mtrNp; + ackCode = 0X28; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set start up parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetStartupParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_STARTUP_IF) { + SetStartupIFParams(mtrCtrl, rxData); + } +} + +/** + * @brief Set adjust speed mode. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetAdjustSpdMode(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get commond code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + if (funcCode == HOST_SPEED_ADJUST) { + mtrCtrl->spdAdjustMode = HOST_SPEED_ADJUST; + /* Uart connect success. */ + mtrCtrl->uartConnectFlag = CONNECTING; + ackCode = 0X2A; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + } else if (funcCode == CUST_SPEED_ADJUST) { + if (cmdCode == 1) { /* If uart connection disconnected & stop motor commond. */ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + } + mtrCtrl->spdAdjustMode = CUST_SPEED_ADJUST; + ackCode = 0X2B; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + /* Uart disconnect. */ + mtrCtrl->uartConnectFlag = DISCONNECT; + } +} + +/** + * @brief Check uart connect. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_UartHandShake(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); +} + +/** + * @brief Set Motor Initial Status Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorInitParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_OBSERVER_TYPE: { /* Set observer type. */ + CMDCODE_SetObserverType(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_PID_PARAMS: { /* Set motor pid parameters. */ + CMDCODE_SetMotorPidParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_OBSERVER_PARAMS: { /* Set observer parameters. */ + CMDCODE_SetObserverParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_TARGETSPD: { /* Set motor speed and speed slope. */ + CMDCODE_SetMotorSpdAndSlope(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_PARAMS: { /* Set motor parameters. */ + CMDCODE_SetMotorParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_ADJUSTSPD_MODE: /* Set adjust speed mode. */ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); + break; + default: + break; + } +} + +/** + * @brief Set Motor Control System Status. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorState(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + BASE_FUNC_UNUSED(rxData); + switch (code) { + case CMDCODE_MOTOR_START: { /* Motor start command */ + CMDCODE_MotorStart(mtrCtrl); + } + break; + case CMDCODE_MOTOR_STOP: { /* Motor stop command */ + CMDCODE_MotorStop(mtrCtrl); + } + break; + case CMDCODE_MOTORSTATE_RESET: { /* Motor reset command */ + CMDCODE_MotorReset(mtrCtrl); + } + break; + default: + break; + } +} + +/** + * @brief Set Startup and Uart Link Handshake Flag Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetOtherParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_STARTUP_PARAMS: /* Set start up parameters. */ + CMDCODE_SetStartupParams(mtrCtrl, rxData); + break; + case CMDCODE_UART_HANDSHAKE: { /* Check uart hand shake. */ + CMDCODE_UartHandShake(mtrCtrl, rxData); + } + break; + case CMDCODE_UART_HEARTDETECT: { /* Check uart hand shake. */ + mtrCtrl->uartHeartDetCnt++; + } + break; + default: + break; + } +} +/** + * @brief Instruction code executor. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_Process(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + CMDCODE_EXE_SetMotorInitParams(mtrCtrl, rxData, code); + CMDCODE_EXE_SetMotorState(mtrCtrl, rxData, code); + CMDCODE_EXE_SetOtherParams(mtrCtrl, rxData, code); +} + +/** + * @brief Host data download callback and data parsing. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + + /* Uart data storage struct */ + CUSTDATATYPE_DEF data; + volatile unsigned char *ptrCnt = &rxBuf[FRAME_CHECK_BEGIN + 1]; + volatile unsigned char *strCnt = &data.data[0].typeCh[0]; + for (unsigned int j = 0; j < FRAME_RECV_DATA_LENTH * FRAME_ONE_DATA_LENTH; j++) { + *strCnt++ = *ptrCnt++; + } + /* Message function code. */ + data.code = rxBuf[FRAME_CHECK_BEGIN]; + CMDCODE_EXE_Process(mtrCtrl, &data, data.code); +} + +/** + * @brief The host computer displays data transmission. + * @param mtrCtrl The motor control handle. + * @param txData Message content. + * @param stage Message status function code. + */ +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txData != NULL); + if (mtrCtrl->stateMachine == FSM_IDLE) { + mtrCtrl->smo.spdEst = 0.0f; + } + /* Data send to host. */ + txData->data[CURRDQ_Q].typeF = mtrCtrl->idqFbk.q; + txData->data[CURRDQ_D].typeF = mtrCtrl->idqFbk.d; + txData->data[CURRREFDQ_Q].typeF = mtrCtrl->idqRef.q; + txData->data[CURRREFDQ_D].typeF = mtrCtrl->idqRef.d; + /* Motor current speed. */ + txData->data[CURRSPD].typeF = mtrCtrl->smo.spdEst * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Motor commond speed. */ + txData->data[SPDCMDHZ].typeF = mtrCtrl->spdCmdHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Bus voltage. */ + txData->data[UDC].typeF = mtrCtrl->udc; + /* Power board temprature. */ + txData->data[POWERBOARDTEMP].typeF = mtrCtrl->powerBoardTemp; + /* Motor protection status flag. */ + txData->data[CUST_ERR_CODE].typeI = mtrCtrl->prot.motorErrStatus.all; + /* Three phase current. */ + txData->data[CURRUVW_U].typeF = mtrCtrl->currUvw.u; + txData->data[CURRUVW_V].typeF = mtrCtrl->currUvw.v; + txData->data[CURRUVW_W].typeF = mtrCtrl->currUvw.w; + /* Three phase pwm duty. */ + txData->data[PWMDUTYUVW_U].typeF = mtrCtrl->dutyUvw.u; + txData->data[PWMDUTYUVW_V].typeF = mtrCtrl->dutyUvw.v; + txData->data[PWMDUTYUVW_W].typeF = mtrCtrl->dutyUvw.w; + /* Motor electric angle. */ + txData->data[AXISANGLE].typeF = mtrCtrl->axisAngle; + txData->data[VDQ_Q].typeF = mtrCtrl->vdqRef.q; + txData->data[VDQ_D].typeF = mtrCtrl->vdqRef.d; + txData->data[SPDREFHZ].typeF = mtrCtrl->spdRefHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + txData->data[SENDTIMESTAMP].typeF = mtrCtrl->uartTimeStamp; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h new file mode 100644 index 00000000..60fe69bb --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/cust_process.h @@ -0,0 +1,36 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "protocol.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); + +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c new file mode 100644 index 00000000..58bf15a7 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.c @@ -0,0 +1,57 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of human-machine interface. + */ + +#include "hmi_module.h" +#include "mcs_assert.h" + +/** + * @brief HMI Initializatio. + * @retval None. + */ +void HMI_Init(void) +{ + UartRecvInit(); +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Rx(mtrCtrl); +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Tx(mtrCtrl); +} diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h new file mode 100644 index 00000000..056f8d73 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/hmi_module.h @@ -0,0 +1,37 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "uart_module.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void HMI_Init(void); + +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl); +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c new file mode 100644 index 00000000..56f0c0bb --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.c @@ -0,0 +1,174 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ + +#include "protocol.h" +#include "apt.h" +#include "typedefs.h" +#include "main.h" +#include "mcs_assert.h" +#include "cust_process.h" + +/** + * @brief Callback function for receiving data analysis and processing. + * @param rxBuf Receive buffer. + */ +__weak void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(rxBuf); +} +/** + * @brief User-defined protocol message sending function (weak function). + * @param rxData Sending Messages.. + */ +__weak void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(*txData); +} + +static void (*g_ptrDataProcess)(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) = CUST_UartDataProcess; + +/** + * @brief Frame checksum. + * @param ptr Pointer to the data to be checked + * @param num Number of bytes + * @retval unsigned char Checksum + */ +static unsigned char CheckSum(unsigned char *ptr, unsigned char num) +{ + unsigned char sum = 0; + unsigned char *p = ptr; + /* Calculate the sum of received data. */ + for (unsigned char i = 0; i < num; i++) { + sum += (unsigned char)*p; + p++; + } + return sum; +} + +/** + * @brief Transmitting Data Frames. + * @param mtrCtrl The motor control handle. + * @param txBuf Sending Messages. + */ +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txBuf != NULL); + unsigned int dataLen = FRAME_ONE_DATA_LENTH * SEND_FRAME_DATA_NUM; + unsigned char i = 0; + CUSTDATATYPE_DEF txData = {0}; + CUST_SetTxMsg(mtrCtrl, &txData); + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_SENT; + /* Message data */ + for (unsigned char x = 0; x < SEND_FRAME_DATA_NUM; x++) { + unsigned char floatIndex = 0; + unsigned char byteOffset = i; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + } + /* Message verification domain */ + txBuf[dataLen + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[dataLen + i++] = FRAME_END; + return dataLen + i; +} + +/** + * @brief Transmitting Data Frames. + * @param txBuf Sending Cust Ack Code. + * @param ackCode Ack Code. + * @param varParams Host set parameter. + */ +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(txBuf != NULL); + CUSTDATATYPE_DEF txData = {0}; + int dataIndex = 0; + unsigned int i = 0; + unsigned int txLen = 0; + unsigned char dataLen = FRAME_ONE_CHAR_LENTH + FRAME_ONE_DATA_LENTH; + + txData.data[0].typeF = varParams; + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_CUSTACK; + /* Message ack code */ + txBuf[i++] = ackCode; + /* Message data */ + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + + /* Message verification domain */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = FRAME_END; + txLen = FRAME_ONE_CHAR_LENTH + i++; + HAL_UART_WriteDMA(&g_uart0, txBuf, txLen); +} + +/** + * @brief Cust receive data process. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + unsigned char g_uartTxBuf[10] = {0}; + unsigned char ackCode = 0; + /* Frame header check */ + if (rxBuf[0] != FRAME_START) { + ackCode = 0X78; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Frame trailer check */ + if (rxBuf[FRAME_LENTH - 1] != FRAME_END) { + ackCode = 0X79; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Checksum */ + if (CheckSum((unsigned char*)&rxBuf[FRAME_CHECK_BEGIN], FRAME_CHECK_NUM) != rxBuf[FRAME_CHECKSUM]) { + ackCode = 0X7A; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } else { + if (g_ptrDataProcess == NULL) { + return; + } else { + g_ptrDataProcess(mtrCtrl, rxBuf); + } + } +} diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h new file mode 100644 index 00000000..900a00d8 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/protocol.h @@ -0,0 +1,121 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ +#ifndef McsMagicTag_PORTOCOL_H +#define McsMagicTag_PORTOCOL_H + +#include "uart.h" +#include "mcs_carrier.h" + +#define RS485_SEND_ENABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = GPIO_PIN_7 +#define RS485_SEND_DISABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = BASE_CFG_UNSET + +#define RX_BUF_LEN (16) +#define SEND_FRAME_DATA_NUM (CUSTDATA_MAX) +/* Service Uart0 Communication Deal */ +#define FRAME_ONE_DATA_LENTH 4 +#define FRAME_ONE_CHAR_LENTH 1 +#define FRAME_RECV_DATA_LENTH 4 +#define FRAME_LENTH 20 /* Data length */ +#define FRAME_SENT 0X8F +#define FRAME_CUSTACK 0X8A +#define FRAME_START 0x0F /* Start frame */ +#define FRAME_END '/' /* StOP frame */ +#define FRAME_CHECK_BEGIN 1 /* Check frame */ +#define FRAME_CHECKSUM 18 /* Check sum */ +#define FRAME_CHECK_NUM 17 +#define CMDCODE_IDLE_FRAME 0x55 /* Fill frame */ +#define CMDCODE_GET_MOTOR_PARAMS 0x01 +#define CMDCODE_SEND_MOTOR_PARAMS 0x02 +#define CMDCODE_SET_MOTOR_CTLMODE 0x03 +#define CMDCODE_SET_OBSERVER_TYPE 0x04 +#define CMDCODE_SET_STARTUP_MODE 0x05 +#define CMDCODE_SET_PID_PARAMS 0x06 +#define CMDCODE_SET_STARTUP_PARAMS 0x07 +#define CMDCODE_SET_OBSERVER_PARAMS 0x08 +#define CMDCODE_SET_MOTOR_TARGETSPD 0x09 +#define CMDCODE_SET_MOTOR_PARAMS 0x0A +#define CMDCODE_MOTOR_START 0x0B +#define CMDCODE_MOTOR_STOP 0x0C +#define CMDCODE_MOTORSTATE_RESET 0x0D +#define CMDCODE_SEND_FIRMVERSION 0x0E +#define CMDCODE_SET_ADJUSTSPD_MODE 0x11 +#define CMDCODE_UART_HANDSHAKE 0x12 +#define CMDCODE_UART_HEARTDETECT 0x13 + +typedef union { + unsigned char typeCh[4]; + float typeF; + int typeI; +} UNIONDATATYPE_DEF; + +typedef enum { + OFFLINE_RES = 0, + OFFLINE_LD, + OFFLINE_LQ, + OFFLINE_PSIF, + OFFLINE_JS, + OFFLINE_NP, + OFFLINE_B, + OFFLINE_KPD, + OFFLINE_KID, + OFFLINE_KPQ, + OFFLINE_KIQ, + OFFLINE_KPS, + OFFLINE_KIS, + OFFLINE_SPEED, + OFLINE_MAX +} OFFLINE_IDEN_TYPE; + +typedef enum { + CURRDQ_Q = 0, + CURRDQ_D, + CURRREFDQ_Q, + CURRREFDQ_D, + CURRSPD, + SPDCMDHZ, + UDC, + POWERBOARDTEMP, + CUST_ERR_CODE, + CURRUVW_U, + CURRUVW_V, + CURRUVW_W, + PWMDUTYUVW_U, + PWMDUTYUVW_V, + PWMDUTYUVW_W, + AXISANGLE, + VDQ_Q, + VDQ_D, + SPDREFHZ, + SENDTIMESTAMP, + CUSTDATA_MAX +} SENDTOHOSTPARAMS; + +typedef struct { + volatile unsigned char code; + volatile UNIONDATATYPE_DEF data[SEND_FRAME_DATA_NUM]; +} CUSTDATATYPE_DEF; + + +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf); +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams); +#endif /* McsMagicTag_PORTOCOL_H */ diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c new file mode 100644 index 00000000..df5e9186 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.c @@ -0,0 +1,184 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#include "uart_module.h" +#include "debug.h" +#include "main.h" +#include "baseinc.h" + +/* Buffer size */ +#define UI_TX_BUF_LEN (96) +#define UI_RX_BUF_LEN (96) + +/* Receiving Timeout Interval */ +#define UART_TIME_OUT_MS (100) + +/* Start sending data to host delay after uart connect success */ +#define UART_UPDATA_DELAY_TIME_MS (50) + +/* Data buffer */ +unsigned char g_uartRxBuf[UI_RX_BUF_LEN] = {0}; +unsigned char g_uartTxBuf[UI_TX_BUF_LEN] = {0}; +static unsigned int getdeltaSystickCnt = 0; +static FRAME_Handle g_uartFrame; +/** + * @brief Receive Data Clear. + * @param uartFrame Receice Data. + * @retval None. + */ +static void FrameRecvClear(FRAME_Handle *uartFrame) +{ + /* Clear buffer lenth. */ + uartFrame->buffLen = 0; + uartFrame->timeOutCnt = 0; + uartFrame->frameFlag = 0; + /* Clear received data lenth. */ + uartFrame->rxLen = 0; + /* Clear received flag. */ + uartFrame->rxFlag = 0; + uartFrame->upDataCnt = 0; + uartFrame->rxAckFlag = 0; +} + +/** + * @brief Set Dma status. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void SetUartDmaStatus(MTRCTRL_Handle *mtrCtrl) +{ + /* Delay 50ms start uart Tx DMA . */ + if (mtrCtrl->uartConnectFlag == CONNECTING && g_uartFrame.upDataDelayCnt++ > UART_UPDATA_DELAY_TIME_MS) { + g_uartFrame.txFlag = 1; /* Start send data flag. */ + mtrCtrl->uartConnectFlag = CONNECTED; + g_uartFrame.upDataDelayCnt = 0; + } + if (mtrCtrl->uartConnectFlag == DISCONNECT) { + g_uartFrame.txFlag = 0; /* Stop send data flag. */ + mtrCtrl->uartTimeStamp = 0; + } +} + +/** + * @brief Uart Dma interupt callback func. + * @param handle Uart handle. + * @retval None. + */ +void UART0_TXDMACallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + unsigned int getCurSystickCnt = 0; + static unsigned int getlastSystickCnt = 0; + /* USER CODE BEGIN UART0_WRITE_DMA_FINISH */ + g_uartFrame.txFlag = 1; + /* Received information answered, information update reserved. */ + if (g_uartFrame.rxAckFlag == 1) { + g_uartFrame.uartItTxFlag = 1; + g_uartFrame.rxAckFlag = 0; + } + getCurSystickCnt = DCL_SYSTICK_GetTick(); + if (getlastSystickCnt != 0) { + /* Calculate unit frame data send time */ + getdeltaSystickCnt = getCurSystickCnt - getlastSystickCnt; + } + getlastSystickCnt = getCurSystickCnt; + /* USER CODE END UART0_WRITE_DMA_FINISH */ +} + +/** + * @brief Uart0 Interruput Read CallBack Function. + * @param handle Uart handle. + * @retval None. + */ +void UART0ReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_READ_IT_FINISH */ + if (g_uartFrame.rxLen >= UI_RX_BUF_LEN - 1) { + g_uartFrame.rxLen = 0; + } + HAL_UART_ReadIT(handle, &g_uartFrame.rxData, 1); + g_uartRxBuf[g_uartFrame.rxLen] = g_uartFrame.rxData; + g_uartFrame.rxLen++; + g_uartFrame.rxFlag = 1; + g_uartFrame.uartItTxFlag = 0; + return; + /* USER CODE END UART0_READ_IT_FINISH */ +} + +/** + * @brief Uart Read Data Init Function. + * @param void. + * @retval None. + */ +void UartRecvInit(void) +{ + /* Uart reception initialization */ + FrameRecvClear(&g_uartFrame); + HAL_UART_ReadIT(&g_uart0, &g_uartFrame.rxData, 1); +} + +/** + * @brief Uart Read Data Process Function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SetUartDmaStatus(mtrCtrl); + if (g_uartFrame.rxFlag == 1) { /* Receive data flag. */ + if (g_uartFrame.timeOutCnt++ > UART_TIME_OUT_MS) { + /* Received data from the host. */ + g_uartFrame.frameFlag = 1; + g_uartFrame.rxFlag = 0; + g_uartFrame.timeOutCnt = 0; + /* Execute data process. */ + CUST_DataReceProcss(mtrCtrl, g_uartRxBuf); + g_uartFrame.rxAckFlag = 1; + g_uartFrame.rxLen = 0; + } + } + g_uartFrame.frameFlag = 0; +} + +/** + * @brief Uart Write Data Process Function. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + if (g_uartFrame.txFlag == 1) { /* Send data flag. */ + mtrCtrl->uartTimeStamp = (float)getdeltaSystickCnt; /* Unit data time stamp */ + g_uartFrame.upDataCnt = 0; + g_uartFrame.txFlag = 0; + /* Send data to host. */ + unsigned int txLen = CUST_TransmitData(mtrCtrl, g_uartTxBuf); + /* If txIT mode send data finish, convert to DMA mode */ + if (g_uartFrame.uartItTxFlag == 1) { + HAL_UART_WriteDMA(&g_uart0, g_uartTxBuf, txLen); + } + } +} diff --git a/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h new file mode 100644 index 00000000..f1f8f899 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_FOC/user/pmsm_sensorless_2shunt_foc/user_interface/uart_module.h @@ -0,0 +1,47 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#ifndef McsMagicTag_UART_MODULE_H +#define McsMagicTag_UART_MODULE_H + +#include "protocol.h" +#include "mcs_ctlmode_config.h" + +typedef struct { + unsigned int buffLen; + unsigned int timeOutCnt; + unsigned char frameFlag; + unsigned int rxLen; + unsigned char rxFlag; + unsigned char txFlag; + unsigned char rxData; + unsigned int upDataCnt; + unsigned int upDataDelayCnt; + unsigned char uartItTxFlag; + unsigned char rxAckFlag; +} FRAME_Handle; + + +void UartRecvInit(void); +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl); +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/feature.h b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/feature.h new file mode 100644 index 00000000..d89f618c --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/feature.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-23 15:45:47 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define CHIP_3061MNPICA MACRO_ENABLE + +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 30000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_UART_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/main.h b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/main.h new file mode 100644 index 00000000..8c5ceec4 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/main.h @@ -0,0 +1,84 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.h + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-23 15:45:47 + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_SYSTEM_INIT_H +#define McuMagicTag_SYSTEM_INIT_H + +#include "adc.h" +#include "adc_ex.h" +#include "acmp.h" +#include "acmp_ex.h" +#include "apt.h" +#include "uart.h" +#include "uart_ex.h" +#include "gpio.h" +#include "timer.h" +#include "timer_ex.h" +#include "crg.h" +#include "iocmg.h" + +#define IO_SPEED_FAST 0x00U +#define IO_SPEED_SLOW 0x01U + +#define IO_DRV_LEVEL4 0x00U +#define IO_DRV_LEVEL3 0x01U +#define IO_DRV_LEVEL2 0x02U +#define IO_DRV_LEVEL1 0x03U + +#define XTAL_DRV_LEVEL4 0x03U +#define XTAL_DRV_LEVEL3 0x02U +#define XTAL_DRV_LEVEL2 0x01U +#define XTAL_DRV_LEVEL1 0x00U + +#define SYS_LED_PIN GPIO_PIN_3 +#define SYS_LED_HANDLE g_gpio2 +#define GpioStartStop_PIN GPIO_PIN_4 +#define GpioStartStop_HANDLE g_gpio2 + +extern ACMP_Handle g_acmp0; +extern TIMER_Handle g_timer1; +extern UART_Handle g_uart0; +extern APT_Handle g_apt0; +extern APT_Handle g_apt1; +extern APT_Handle g_apt2; +extern ADC_Handle g_adc0; + +extern GPIO_Handle g_gpio1; +extern GPIO_Handle g_gpio2; + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect); +void SystemInit(void); + +void MotorStatemachineCallBack(void *handle); +void TIMER1_DMAOverFlow_InterruptProcess(void *handle); +void MotorCarrierProcessCallback(void *aptHandle); +void MotorSysErrCallback(void *aptHandle); + +void MotorStartStopKeyCallback(void *param); + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_SYSTEM_INIT_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/system_init.c b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/system_init.c new file mode 100644 index 00000000..c737cc23 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/generatecode/system_init.c @@ -0,0 +1,530 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file system_init.c + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-23 15:45:47 + */ + +#include "main.h" +#include "ioconfig.h" +#include "iocmg_ip.h" + +#define UART0_BAUD_RATE 115200 + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) +{ + CRG_Handle crg; + crg.baseAddress = CRG; + crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC; + crg.pllPreDiv = CRG_PLL_PREDIV_4; + crg.pllFbDiv = 48; /* PLL Multiplier 48 */ + crg.pllPostDiv = CRG_PLL_POSTDIV_2; + crg.coreClkSelect = CRG_CORE_CLK_SELECT_PLL; + crg.handleEx.pllPostDiv2 = CRG_PLL_POSTDIV2_3; + crg.handleEx.clk1MSelect = CRG_1M_CLK_SELECT_HOSC; + crg.handleEx.clk1MDiv = (25 - 1); /* The 1 MHz freq is equal to the input clock frequency / (clk_1m_div + 1). 25 is the div of the clk_1m in CLOCK. */ + + if (HAL_CRG_Init(&crg) != BASE_STATUS_OK) { + return BASE_STATUS_ERROR; + } + *coreClkSelect = crg.coreClkSelect; + return BASE_STATUS_OK; +} + +static void ACMP0_Init(void) +{ + HAL_CRG_IpEnableSet(ACMP0_BASE, IP_CLK_ENABLE); /* ACMP clock bit reset. */ + g_acmp0.baseAddress = ACMP0_BASE; + g_acmp0.inOutConfig.inputNNum = ACMP_INPUT_N_SELECT2; + g_acmp0.inOutConfig.inputPNum = ACMP_INPUT_P_SELECT2; + g_acmp0.inOutConfig.polarity = ACMP_OUT_NOT_INVERT; + g_acmp0.filterCtrl.filterMode = ACMP_FILTER_NONE; + g_acmp0.hysteresisVol = ACMP_HYS_VOL_30MV; + g_acmp0.interruptEn = BASE_CFG_UNSET; + HAL_ACMP_Init(&g_acmp0); +} + +static void ADC0_Init(void) +{ + HAL_CRG_IpEnableSet(ADC0_BASE, IP_CLK_ENABLE); + HAL_CRG_IpClkSelectSet(ADC0_BASE, CRG_ADC_CLK_ASYN_PLL_DIV); + HAL_CRG_IpClkDivSet(ADC0_BASE, CRG_ADC_DIV_1); + + g_adc0.baseAddress = ADC0; + g_adc0.socPriority = ADC_PRIMODE_ALL_ROUND; + + HAL_ADC_Init(&g_adc0); + + SOC_Param socParam = {0}; + socParam.adcInput = ADC_CH_ADCINA11; /* PIN9(ADC AIN11) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM5, &socParam); + + socParam.adcInput = ADC_CH_ADCINA12; /* PIN10(ADC AIN12) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM2, &socParam); + + socParam.adcInput = ADC_CH_ADCINA10; /* PIN8(ADC AIN10) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_APT0_SOCA; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM6, &socParam); + + socParam.adcInput = ADC_CH_ADCINA9; /* PIN7(ADC AIN9) */ + socParam.sampleTotalTime = ADC_SOCSAMPLE_5CLK; /* adc sample total time 5 adc_clk */ + socParam.trigSource = ADC_TRIGSOC_SOFT; + socParam.continueMode = BASE_CFG_DISABLE; + socParam.finishMode = ADC_SOCFINISH_NONE; + HAL_ADC_ConfigureSoc(&g_adc0, ADC_SOC_NUM9, &socParam); +} + +__weak void MotorSysErrCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_EVENT_INTERRUPT */ + /* USER CODE END APT0_EVENT_INTERRUPT */ +} + +__weak void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +static void APT0_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_ENABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt0, &protectApt); +} + +static void APT0_Init(void) +{ + HAL_CRG_IpEnableSet(APT0_BASE, IP_CLK_ENABLE); + + g_apt0.baseAddress = APT0; + + /* Clock Settings */ + g_apt0.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt0.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt0.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt0.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt0.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt0.waveform.divInitVal = 0; + g_apt0.waveform.cntInitVal = 0; + g_apt0.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt0.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt0.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt0.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt0.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCA = 6000; /* 6000 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt0.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCA = 1; + + /* ADC Trigger SOCB */ + g_apt0.adcTrg.trgEnSOCB = BASE_CFG_ENABLE; + g_apt0.adcTrg.cntCmpSOCB = 1; + g_apt0.adcTrg.trgSrcSOCB = APT_CS_SRC_CNTR_CMPA_DOWN; + g_apt0.adcTrg.trgScaleSOCB = 1; + + g_apt0.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt0.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + /* Timer Trigger */ + g_apt0.tmrInterrupt.tmrInterruptEn = BASE_CFG_ENABLE; + g_apt0.tmrInterrupt.tmrInterruptSrc = APT_INT_SRC_CNTR_CMPC_UP; + g_apt0.tmrInterrupt.tmrInterruptScale = 1; + + APT0_ProtectInit(); + + HAL_APT_PWMInit(&g_apt0); + HAL_APT_RegisterCallBack(&g_apt0, APT_EVENT_INTERRUPT, MotorSysErrCallback); + IRQ_SetPriority(IRQ_APT0_EVT, 7); /* 7 is priority value */ + IRQ_Register(IRQ_APT0_EVT, HAL_APT_EventIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_EVT); + HAL_APT_RegisterCallBack(&g_apt0, APT_TIMER_INTERRUPT, MotorCarrierProcessCallback); + IRQ_SetPriority(IRQ_APT0_TMR, 6); /* 6 is priority value */ + IRQ_Register(IRQ_APT0_TMR, HAL_APT_TimerIrqHandler, &g_apt0); + IRQ_EnableN(IRQ_APT0_TMR); +} + +static void APT1_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt1, &protectApt); +} + +static void APT1_Init(void) +{ + HAL_CRG_IpEnableSet(APT1_BASE, IP_CLK_ENABLE); + + g_apt1.baseAddress = APT1; + + /* Clock Settings */ + g_apt1.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt1.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt1.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt1.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt1.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt1.waveform.divInitVal = 0; + g_apt1.waveform.cntInitVal = 0; + g_apt1.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt1.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt1.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt1.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + /* ADC Trigger SOCA */ + g_apt1.adcTrg.trgEnSOCA = BASE_CFG_ENABLE; + g_apt1.adcTrg.cntCmpSOCA = 1; /* 1 is count compare point of ADC trigger source SOCA when using CMPA */ + g_apt1.adcTrg.trgSrcSOCA = APT_CS_SRC_CNTR_ZERO; + g_apt1.adcTrg.trgScaleSOCA = 1; + + g_apt1.adcTrg.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt1.adcTrg.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + + APT1_ProtectInit(); + + HAL_APT_PWMInit(&g_apt1); +} + +static void APT2_ProtectInit(void) +{ + APT_OutCtrlProtectEx protectApt = {0}; + protectApt.ocEventEnEx = BASE_CFG_ENABLE; + protectApt.ocEventModeEx = APT_OUT_CTRL_ONE_SHOT; + protectApt.ocActionEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocActionBEx = APT_OUT_CTRL_ACTION_LOW; + protectApt.ocEvtInterruptEnEx = BASE_CFG_DISABLE; + protectApt.ocSysEvent = APT_SYS_EVT_DEBUG | APT_SYS_EVT_CLK | APT_SYS_EVT_MEM; + protectApt.originalEvtEx = APT_EM_ORIGINAL_SRC_ACMP0; + protectApt.evtPolarityMaskEx = APT_EM_ACMP0_INVERT_BIT; + protectApt.filterCycleNumEx = 0; + HAL_APT_ProtectInitEx(&g_apt2, &protectApt); +} + +static void APT2_Init(void) +{ + HAL_CRG_IpEnableSet(APT2_BASE, IP_CLK_ENABLE); + + g_apt2.baseAddress = APT2; + + /* Clock Settings */ + g_apt2.waveform.dividerFactor = 1 - 1; + /* Timer Settings */ + g_apt2.waveform.timerPeriod = 6250; /* 6250 is count period of APT time-base timer */ + g_apt2.waveform.cntMode = APT_COUNT_MODE_UP_DOWN; + + /* Wave Form */ + g_apt2.waveform.basicType = APT_PWM_BASIC_A_HIGH_B_LOW; + g_apt2.waveform.chAOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.chBOutType = APT_PWM_OUT_BASIC_TYPE; + g_apt2.waveform.divInitVal = 0; + g_apt2.waveform.cntInitVal = 0; + g_apt2.waveform.cntCmpLeftEdge = 3125; /* 3125 is count compare point of the left edge of PWM waveform */ + g_apt2.waveform.cntCmpRightEdge = 3125; /* 3125 is count compare point of the right edge of PWM waveform */ + g_apt2.waveform.cntCmpLoadMode = APT_BUFFER_INDEPENDENT_LOAD; + g_apt2.waveform.cntCmpLoadEvt = APT_COMPARE_LOAD_EVENT_ZERO; + g_apt2.waveform.deadBandCnt = 150; /* 150 is dead-band value */ + + APT2_ProtectInit(); + + HAL_APT_PWMInit(&g_apt2); +} + +__weak void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + BASE_FUNC_UNUSED(handle); +} + +static void GPIO_Init(void) +{ + HAL_CRG_IpEnableSet(GPIO1_BASE, IP_CLK_ENABLE); + g_gpio1.baseAddress = GPIO1; + + g_gpio1.pins = GPIO_PIN_0; + HAL_GPIO_Init(&g_gpio1); + HAL_GPIO_SetDirection(&g_gpio1, g_gpio1.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio1, g_gpio1.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio1, g_gpio1.pins, GPIO_INT_TYPE_NONE); + + HAL_CRG_IpEnableSet(GPIO2_BASE, IP_CLK_ENABLE); + g_gpio2.baseAddress = GPIO2; + + g_gpio2.pins = GPIO_PIN_3; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_OUTPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_NONE); + + g_gpio2.pins = GPIO_PIN_4; + HAL_GPIO_Init(&g_gpio2); + HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_INPUT_MODE); + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_LOW_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_FALL_EDGE); + + HAL_GPIO_RegisterCallBack(&g_gpio2, GPIO_PIN_4, MotorStartStopKeyCallback); + IRQ_Register(IRQ_GPIO2, HAL_GPIO_IrqHandler, &g_gpio2); + IRQ_SetPriority(IRQ_GPIO2, 1); /* set gpio1 interrupt priority to 1, 1~15. 1 is priority value */ + IRQ_EnableN(IRQ_GPIO2); /* gpio interrupt enable */ + + return; +} + +__weak void MotorStatemachineCallBack(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN MotorStatemachineCallBack */ + /* USER CODE END MotorStatemachineCallBack */ +} + +static void TIMER1_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER1_BASE, IP_CLK_ENABLE); /* TIMER1 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER1) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 500; + + g_timer1.baseAddress = TIMER1; + g_timer1.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer1.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer1.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer1.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer1.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer1.interruptEn = BASE_CFG_ENABLE; + g_timer1.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer1.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer1); + IRQ_Register(IRQ_TIMER1, HAL_TIMER_IrqHandler, &g_timer1); + + HAL_TIMER_RegisterCallback(&g_timer1, TIMER_PERIOD_FIN, MotorStatemachineCallBack); + IRQ_SetPriority(IRQ_TIMER1, 2); /* 2 is priority value */ + IRQ_EnableN(IRQ_TIMER1); +} + +static void UART0_Init(void) +{ + HAL_CRG_IpEnableSet(UART0_BASE, IP_CLK_ENABLE); /* UART0 clock enable. */ + g_uart0.baseAddress = UART0; + + g_uart0.baudRate = UART0_BAUD_RATE; + g_uart0.dataLength = UART_DATALENGTH_8BIT; + g_uart0.stopBits = UART_STOPBITS_ONE; + g_uart0.parity = UART_PARITY_NONE; + g_uart0.txMode = UART_MODE_BLOCKING; + g_uart0.rxMode = UART_MODE_BLOCKING; + g_uart0.fifoMode = BASE_CFG_ENABLE; + g_uart0.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart0.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart0.hwFlowCtr = BASE_CFG_DISABLE; + g_uart0.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart0.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart0); +} + +static void IOConfig(void) +{ + SYSCTRL0->SC_SYS_STAT.BIT.update_mode = 0; + SYSCTRL0->SC_SYS_STAT.BIT.update_mode_clear = 1; + /* Config PIN9 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_5_AS_ADC_AIN11); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_5_AS_ADC_AIN11, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_5_AS_ADC_AIN11, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_5_AS_ADC_AIN11, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_5_AS_ADC_AIN11, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN10 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO5_3_AS_ADC_AIN12); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO5_3_AS_ADC_AIN12, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO5_3_AS_ADC_AIN12, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO5_3_AS_ADC_AIN12, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO5_3_AS_ADC_AIN12, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN8 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_6_AS_ADC_AIN10); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_6_AS_ADC_AIN10, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_6_AS_ADC_AIN10, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_6_AS_ADC_AIN10, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_6_AS_ADC_AIN10, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN7 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_7_AS_ADC_AIN9); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_7_AS_ADC_AIN9, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_7_AS_ADC_AIN9, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_7_AS_ADC_AIN9, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_7_AS_ADC_AIN9, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN48 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_6_AS_ACMP_N2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_6_AS_ACMP_N2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_6_AS_ACMP_N2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_6_AS_ACMP_N2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_6_AS_ACMP_N2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN47 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_5_AS_ACMP_P2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_5_AS_ACMP_P2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_5_AS_ACMP_P2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_5_AS_ACMP_P2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_5_AS_ACMP_P2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN1 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_7_AS_ACMP0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_7_AS_ACMP0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_7_AS_ACMP0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_7_AS_ACMP0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_7_AS_ACMP0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN27 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_0_AS_GPIO1_0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_0_AS_GPIO1_0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_0_AS_GPIO1_0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_0_AS_GPIO1_0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_0_AS_GPIO1_0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN35 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_3_AS_GPIO2_3); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_3_AS_GPIO2_3, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_3_AS_GPIO2_3, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_3_AS_GPIO2_3, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_3_AS_GPIO2_3, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN41 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_4_AS_GPIO2_4); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_4_AS_GPIO2_4, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_4_AS_GPIO2_4, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_4_AS_GPIO2_4, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_4_AS_GPIO2_4, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN19 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_0_AS_APT0_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_0_AS_APT0_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_0_AS_APT0_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_0_AS_APT0_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_0_AS_APT0_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN23 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_0_AS_APT0_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_0_AS_APT0_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_0_AS_APT0_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_0_AS_APT0_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_0_AS_APT0_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN20 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_1_AS_APT1_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_1_AS_APT1_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_1_AS_APT1_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_1_AS_APT1_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_1_AS_APT1_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN24 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_1_AS_APT1_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_1_AS_APT1_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_1_AS_APT1_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_1_AS_APT1_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_1_AS_APT1_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN21 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_2_AS_APT2_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_2_AS_APT2_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_2_AS_APT2_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_2_AS_APT2_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_2_AS_APT2_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN25 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_2_AS_APT2_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_2_AS_APT2_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_2_AS_APT2_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_2_AS_APT2_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_2_AS_APT2_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ +} + +static void APT_SyncMasterInit(void) +{ + HAL_APT_MasterSyncInit(&g_apt0, APT_SYNC_OUT_ON_CNTR_ZERO); +} + +static void APT_SyncSlaveInit(void) +{ + APT_SlaveSyncIn aptSlave; + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt1, &aptSlave); + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt2, &aptSlave); + +} + +void SystemInit(void) +{ + IOConfig(); + UART0_Init(); + ACMP0_Init(); + APT0_Init(); + APT1_Init(); + APT2_Init(); + ADC0_Init(); + TIMER1_Init(); + GPIO_Init(); + + APT_SyncMasterInit(); + APT_SyncSlaveInit(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/main.c b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/main.c new file mode 100644 index 00000000..83b0b133 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/main.c @@ -0,0 +1,67 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + * @date 2025-04-23 15:45:47 + */ + +#include "typedefs.h" +#include "feature.h" +#include "mcs_motor_process.h" +#include "main.h" +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ +/* USER CODE END 0 */ +ACMP_Handle g_acmp0; +TIMER_Handle g_timer1; +UART_Handle g_uart0; +APT_Handle g_apt0; +APT_Handle g_apt1; +APT_Handle g_apt2; +ADC_Handle g_adc0; +GPIO_Handle g_gpio1; +GPIO_Handle g_gpio2; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ +/* USER CODE END 1 */ + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + /* USER CODE END 2 */ + MotorMainProcess(); + /* USER CODE BEGIN 3 */ + /* 建议用户放置初始配置代码 */ + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + /* 建议用户放置周期性执行代码 */ + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c new file mode 100644 index 00000000..d53b28d7 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.c @@ -0,0 +1,562 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.c + * @author MCU Algorithm Team + * @brief This file provides motor application for ECBMCU201MPC board. + * @details BLDC six-step application based on the ECBMCU201MPC board + * 1) Motor model is Gimbal GBM2804H-100T. + * 2) Select the bldc six-step sensorless example in the sample column + of chipConfig and click Generate Code. + * 3) It's power supply must be changed to 12V. + */ + +#include "debug.h" +#include "mcs_assert.h" +#include "mcs_user_config.h" +#include "mcs_status.h" +#include "mcs_carrier.h" +#include "mcs_motor_process.h" + +/*------------------------------- Macro Definition -----------------------------------------------*/ +#define US_PER_MS 1000 +#define APT_FULL_DUTY 1.0f + +/* Motor control handle for bldc */ +static MtrCtrlHandle g_mc; + +static APT_RegStruct* g_aptCp[PHASE_MAX_NUM] = {BRIDGE_CTR_APT_U, BRIDGE_CTR_APT_V, BRIDGE_CTR_APT_W}; + +/** + * @brief Initialzer of system tick. + * @param mtrCtrl Motor control struct handle. + * @retval None. + */ +static void TimerTickInit(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysTickCnt = 0; + mtrCtrl->msTickNum = US_PER_MS / SYSTICK_PERIOD_US; + mtrCtrl->capChargeTickNum = (INV_CAP_CHARGE_MS * US_PER_MS / SYSTICK_PERIOD_US); +} + +/** + * @brief Read the ADC current sampling value of the compressor. + * @param CurrUvw Three-phase current. + * @retval None. + */ +static void ReadBemfUVWMotor(UVWBemf *bemfUVW) +{ + MCS_ASSERT_PARAM(bemfUVW != NULL); + bemfUVW->u = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_U_SOC_NUM)&0xFFF); + bemfUVW->v = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_V_SOC_NUM)&0xFFF); + bemfUVW->w = (int)(HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_W_SOC_NUM)&0xFFF); +} + +/** + * @brief Init motor control task. + * @retval None. + */ +static void TSK_InitMotor(void) +{ + /* Initialize target speed. */ + g_mc.spdCmdHz = SDP_TARGET_VALUE; + /* zeroPoint = IN_VOLTAGE_BUS / 2.0; 4095/3.3 :ADC value corresponding to 1 V */ + g_mc.zeroPoint = ((((float)IN_VOLTAGE_BUS / 2.0) * VOL_DIVIDER_COEFFICIENT) * 4095 / 3.3); + g_mc.pwmDuty = FORCE_DRAG_MINDUTY; + + /* Sets the number of sample filtering times for zero-crossing sampling. */ + g_mc.sysVar.bemfFilterCnt = FILTER_COUNT; + g_mc.sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + + g_mc.stateMachine = FSM_IDLE; + g_mc.aptMaxcntCmp = g_apt0.waveform.timerPeriod; + + /* Speed management initialization. */ + RMG_Init(&g_mc.spdRmg, CTRL_SYSTICK_PERIOD, USER_SPD_SLOPE); /* Init speed slope */ + TimerTickInit(&g_mc); + + /* Pid control parameter initialization. */ + g_mc.spdPi.kp = SPD_PID_KP; + g_mc.spdPi.ki = SPD_PID_KI; + g_mc.spdPi.ts = SPD_PID_TS; + g_mc.spdPi.upperLimit = APT_DUTYLIMIT_MAX; + g_mc.spdPi.lowerLimit = APT_DUTYLIMIT_MIN; + + /* BLDC six-step control initialization. */ + g_mc.stepCtrl.phaseStep = STEP1; + g_mc.stepCtrl.controlApt.u = &g_apt0; + g_mc.stepCtrl.controlApt.v = &g_apt1; + g_mc.stepCtrl.controlApt.w = &g_apt2; +} + + +/** + * @brief Software Initialization. + * @retval None. + */ +static void InitSoftware(void) +{ + TSK_InitMotor(); + + g_mc.readBemfUVW = ReadBemfUVWMotor; +} + +/** + * @brief Enable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputEnable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Enable three-phase pwm output */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_UNSET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_UNSET; + } +} + +/** + * @brief Disable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputDisable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Disable three-phase pwm output. */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_SET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_SET; + DCL_APT_ForcePWMOutputLow(aptx); + } +} + +/** + * @brief Force rotor alignment to home position. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ForceAlign(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); + MotorPwmOutputEnable(g_aptCp); + mtrCtrl->stepCtrl.phaseStep = STEP6; + SixStepPwm(&mtrCtrl->stepCtrl); + BASE_FUNC_DELAY_MS(100); /* Delay 100 ms waiting for rotor alignment. */ + mtrCtrl->stepCtrl.phaseStep = STEP1; + SixStepPwm(&mtrCtrl->stepCtrl); + BASE_FUNC_DELAY_MS(100); /* Delay 100 ms waiting for rotor alignment. */ + mtrCtrl->sysVar.lastZeroPoint = DCL_SYSTICK_GetTick(); +} + +/** + * @brief Pre-processing of motor status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void MotorStatePerProc(SysStatusReg *statusReg, volatile FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* Get system status */ + if (SysIsError(statusReg)) { + *stateMachine = FSM_FAULT; + } + if (SysGetCmdStop(statusReg)) { + SysCmdStopClr(statusReg); + *stateMachine = FSM_WAIT_STOP; + } +} + +/** + * @brief Open the three-phase lower pipe. + * @param aptAddr Three-phase APT address pointer. + * @param maxDutyCnt Max duty count. + * @retval None. + */ +static void AptTurnOnLowSidePwm(APT_RegStruct **aptAddr, unsigned int maxDutyCnt) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(maxDutyCnt != 0); + unsigned int dutyCnt; + dutyCnt = maxDutyCnt * APT_FULL_DUTY; + /* Open the three-phase lower pipe */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = aptAddr[i]; + aptx->TC_REFC.BIT.rg_cnt_refc = dutyCnt; + aptx->TC_REFD.BIT.rg_cnt_refd = dutyCnt; + } +} + +/** + * @brief Check systerm cmd start signal. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckSysCmdStart(MtrCtrlHandle *mtrCtrl, APT_RegStruct **aptAddr, SysStatusReg *statusReg, + FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check start cmd */ + if (SysGetCmdStart(statusReg)) { + SysRunningSet(statusReg); + SysCmdStartClr(statusReg); + mtrCtrl->sysTickCnt = 0; + *stateMachine = FSM_CAP_CHARGE; + /* Preparation for charging the bootstrap capacitor. */ + AptTurnOnLowSidePwm(aptAddr, mtrCtrl->aptMaxcntCmp); + /* Out put pwm */ + MotorPwmOutputEnable(aptAddr); + } +} + +/** + * @brief Clear historical values of all controller before start-up. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ClearBeforeStartup(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->aptMaxcntCmp = g_apt0.waveform.timerPeriod; + + /* Clear bemf parameters. */ + mtrCtrl->bemf.u = 0; + mtrCtrl->bemf.v = 0; + mtrCtrl->bemf.w = 0; + + /* Clear tickcnt. */ + mtrCtrl->msTickCnt = 0; + + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + + /* Clear spd parameters. */ + mtrCtrl->spdEstHz = 0; + mtrCtrl->spdRefHz = 0; + + mtrCtrl->stepCtrl.phaseStep = STEP1; + + mtrCtrl->sysTickCnt = 0; + + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_START_INTERVAL; + mtrCtrl->sysVar.changePhaseFlag = 0; + mtrCtrl->sysVar.firstEventFilterFlag = 0; + mtrCtrl->sysVar.stepTimeNum = 0; + mtrCtrl->sysVar.stepTimeFilterEnable = 0; + for (int i = 0; i < STEP_MAX_NUM; i++) { + mtrCtrl->sysVar.stepTime[i] = 0; + } + /* RMG CLEAR */ + RMG_Clear(&mtrCtrl->spdRmg); /* Clear the history value of speed slope control */ + /* SPDCTRL CLEAR */ + PID_Clear(&mtrCtrl->spdPi); +} + +/** + * @brief Check bootstrap capacitor charge time. + * @param mtrCtrl The motor control handle. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckBootstrpCapChargeTime(MtrCtrlHandle *mtrCtrl, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + mtrCtrl->sysTickCnt++; + /* check bootstrap capacitor charge time */ + if (mtrCtrl->sysTickCnt == mtrCtrl->capChargeTickNum) { + /* Update Status. */ + *stateMachine = FSM_CLEAR; + } +} + +/** + * @brief Check over current status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckOverCurrentState(SysStatusReg *statusReg, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check systerm error status */ + if (SysIsError(statusReg) == false) { + *stateMachine = FSM_IDLE; + } +} + +/** + * @brief Deceleration control phase before stop. + * @param mtrCtrl The motor control handle. + * @param statusReg Motor Control Status. + * @param targetSpd Deceleration target value. + * @param switchSpd Switch to stop state speed. + * @retval None. + */ +static void DecelerateSpeed(MtrCtrlHandle *mtrCtrl, FsmState *stateMachine, float targetSpd, float switchSpd) +{ + /* Reduce speed before stop. */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, targetSpd); + mtrCtrl->spdPi.error = mtrCtrl->spdRefHz - mtrCtrl->spdEstHz; + /* Speed loop control */ + mtrCtrl->pwmDuty = PI_Exec(&mtrCtrl->spdPi); + if (mtrCtrl->spdRefHz <= switchSpd) { /* Maximum speed for switching to the FSM_STOP state */ + *stateMachine = FSM_STOP; + } +} + +/** + * @brief System timer tick task. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void TSK_SystickIsr(MtrCtrlHandle *mtrCtrl, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + SysStatusReg *statusReg = &mtrCtrl->statusReg; + volatile FsmState *stateMachine = &mtrCtrl->stateMachine; + mtrCtrl->msTickCnt++; + /* Pre-processing of motor status. */ + MotorStatePerProc(statusReg, stateMachine); + /* statemachine */ + switch (*stateMachine) { + case FSM_IDLE: + CheckSysCmdStart(mtrCtrl, aptAddr, statusReg, (FsmState *)stateMachine); + break; + case FSM_CAP_CHARGE: + /* Bootstrap Capacitor Charging Timing */ + CheckBootstrpCapChargeTime(mtrCtrl, (FsmState *)stateMachine); + break; + case FSM_CLEAR: + /* Clearing control parameters. */ + ClearBeforeStartup(mtrCtrl); + /* Rotor alignment. */ + ForceAlign(mtrCtrl); + *stateMachine = FSM_STARTUP; + break; + case FSM_STARTUP: + /* Forced drag. */ + break; + case FSM_RUN: + /* Speed ramp control */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + mtrCtrl->spdPi.error = mtrCtrl->spdRefHz - mtrCtrl->spdEstHz; + /* Speed loop control */ + mtrCtrl->pwmDuty = PI_Exec(&mtrCtrl->spdPi); + break; + case FSM_WAIT_STOP: + /* 5.0f : maximum speed for switching to the FSM_STOP state */ + DecelerateSpeed(mtrCtrl, (FsmState *)stateMachine, 0.0f, 5.0f); + break; + case FSM_STOP: + MotorPwmOutputDisable(aptAddr); + SysRunningClr(statusReg); + *stateMachine = FSM_IDLE; + break; + case FSM_FAULT: + /* Overcurrent state */ + CheckOverCurrentState(statusReg, (FsmState *)stateMachine); + break; + default: + break; + } +} + +/** + * @brief Overcurrent protection. + * @param aptHandle The apt Handle. + * @retval None. + */ +void MotorSysErrCallback(void *aptHandle) +{ + /* Overcurrent protection callback function. */ + BASE_FUNC_UNUSED(aptHandle); + MotorPwmOutputDisable(g_aptCp); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_U], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_V], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_aptCp[PHASE_W], APT_OC_COMBINE_EVENT_A1); + /* Status setting error */ + SysErrorSet(&g_mc.statusReg); + DBG_PRINTF("APT error! \r\n"); + HAL_GPIO_SetValue(&g_gpio2, GPIO_PIN_3, GPIO_LOW_LEVEL); +} + +/** + * @brief Motor blockage protection function. + * @retval None. + */ +static void MotorBlockageProtect(void) +{ + unsigned int currentTick = DCL_SYSTICK_GetTick(); /* Get the current tick value. */ + unsigned int intervalTick = (currentTick >= g_mc.sysVar.lastZeroPoint) + ? currentTick - g_mc.sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - g_mc.sysVar.lastZeroPoint + currentTick + 1; + if (intervalTick > SYSTICK_GetCRGHZ()) { + MotorPwmOutputDisable(g_aptCp); + SysErrorSet(&g_mc.statusReg); + g_mc.spdEstHz = 0; + return; + } +} + +/** + * @brief Carrier Interruption. + * @param aptHandle The apt Handle. + * @retval None. + */ +void MotorCarrierProcessCallback(void *aptHandle) +{ + BASE_FUNC_UNUSED(aptHandle); + /* USER CODE BEGIN APT0_TIMER_INTERRUPT */ + MCS_CarrierProcess(&g_mc); + if (g_mc.stateMachine == FSM_RUN || g_mc.stateMachine == FSM_WAIT_STOP) { + MotorBlockageProtect(); + } + /* USER CODE END APT0_TIMER_INTERRUPT */ +} + +/** + * @brief Change phase delay callback function. + * @param handle The TIMER1 Handle. + * @retval None. + */ +void MotorStatemachineCallBack(void *handle) +{ + /* TIMER1CallbackFunction */ + BASE_FUNC_UNUSED(handle); + TSK_SystickIsr(&g_mc, g_aptCp); +} + +/** + * @brief Check Potentiometer Value and adjust speed. + * @param None. + * @retval None. + */ +static void AdjustSpeedFunction(void) +{ + static unsigned int potentiomitorAdcValue = 0; + static float spdCmdHz = 0; + static float spdCmdHzLast = SDP_MAX_VALUE; + HAL_ADC_SoftTrigSample(&ADC_HANDLE, ADC_SOC_NUM9); /* Get the speed adjustment resistance. */ + potentiomitorAdcValue = HAL_ADC_GetConvResult(&ADC_HANDLE, ADC_SOC_NUM9); + /* 4045.0 is adc sample max value of potentiomitor */ + spdCmdHz = (float)potentiomitorAdcValue / 4045.0 * SDP_MAX_VALUE; + if (spdCmdHz < SDP_MIN_VALUE) { /* Speed protection. */ + spdCmdHz = SDP_MIN_VALUE; + } + if (spdCmdHz > SDP_MAX_VALUE) { + spdCmdHz = SDP_MAX_VALUE; + } + float delta = spdCmdHzLast > spdCmdHz ? (spdCmdHzLast - spdCmdHz) : (spdCmdHz - spdCmdHzLast); + /* 1.0 : If the speed fluctuation is less than 1.0Hz, no change is made. */ + if (delta < 1.0) { + return; + } + spdCmdHzLast = spdCmdHz; + g_mc.spdCmdHz = spdCmdHz; +} + +/** + * @brief Config the KEY func. + * @param handle The GPIO handle. + * @retval None. + */ +static KEY_State Key_StateRead(GPIO_Handle *handle) +{ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + BASE_FUNC_DELAY_MS(30); /* delay 30ms for deshake */ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + while (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + } + return KEY_DOWN; + } + } + return KEY_UP; +} + +/** + * @brief Control motor start and stop state by key func. + * @param param The GPIO handle. + * @retval None. + */ +void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + if (Key_StateRead(handle) == KEY_DOWN) { + if (SysIsRunning(&g_mc.statusReg)) { /* stop apt output, motor is off status */ + SysCmdStopSet(&g_mc.statusReg); + } else { /* start apt output, motor is on status */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + SysCmdStartSet(&g_mc.statusReg); + } + } +} + +/** + * @brief User application entry. + * @retval BSP_OK. + */ +int MotorMainProcess(void) +{ + SystemInit(); + /* System Initialization. */ + unsigned int tickNum100Ms = 200; /* 100ms tick */ + static unsigned int tickCnt100Ms = 0; + unsigned int tickNum500Ms = 1000; /* 500ms tick */ + static unsigned int tickCnt500Ms = 0; + + HAL_TIMER_Start(&g_timer1); + /* Disable PWM output before startup. */ + MotorPwmOutputDisable(g_aptCp); + InitSoftware(); + /* Start the PWM clock. */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); + + while (true) { + if (g_mc.msTickCnt - tickCnt100Ms >= tickNum100Ms) { + tickCnt100Ms = g_mc.msTickCnt; + /* User Code 100ms Event */ + AdjustSpeedFunction(); + } + if (g_mc.msTickCnt - tickCnt500Ms >= tickNum500Ms) { + if (SysIsError(&g_mc.statusReg) == true) { + break; + } + /* The LED blinks when no status is not error. */ + HAL_GPIO_TogglePin(&SYS_LED_HANDLE, SYS_LED_PIN); + tickCnt500Ms = g_mc.msTickCnt; + } + } + return 0; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h new file mode 100644 index 00000000..a2fdeb2c --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_motor_process.h @@ -0,0 +1,47 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.h + * @author MCU Algorithm Team + * @brief This file provides motor sample functions declaration for ECBMCU201MPC board. + */ +#ifndef McuMagicTag_MCS_MOTOR_PROCESS_H +#define McuMagicTag_MCS_MOTOR_PROCESS_H + +#include "main.h" + +/** + * @brief phase sequence. + */ +typedef enum { + PHASE_U = 0, + PHASE_V, + PHASE_W, + PHASE_MAX_NUM +} MCS_PhaseEnum; + +/** + * @brief key state. + */ +typedef enum { + KEY_DOWN = 0, + KEY_UP = 1, +} KEY_State; + +int MotorMainProcess(void); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h new file mode 100644 index 00000000..6f88c4c4 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/application/mcs_user_config.h @@ -0,0 +1,94 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECBMCU201MPC app. + */ +#ifndef McuMagicTag_MCS_CONFIG_H +#define McuMagicTag_MCS_CONFIG_H + +#if defined(CHIP_3061MNPICA) || defined(CHIP_3061MNNICA) || defined(CHIP_3061MNPIC8) || defined(CHIP_3061MNNIC8) +#define ADC_U_SOC_NUM ADC_SOC_NUM2 +#define ADC_V_SOC_NUM ADC_SOC_NUM5 +#define ADC_W_SOC_NUM ADC_SOC_NUM6 +#define ADC_SPD_ADJ_SOC_NUM ADC_SOC_NUM9 +#define ADC_HANDLE g_adc0 +#endif + +#if defined (CHIP_3066MNPIRH) || defined (CHIP_3065PNPIRH) || defined (CHIP_3065PNPIRE) || defined (CHIP_3065PNPIRA) +#define ADC_U_SOC_NUM ADC_SOC_NUM3 +#define ADC_V_SOC_NUM ADC_SOC_NUM5 +#define ADC_W_SOC_NUM ADC_SOC_NUM7 +#define ADC_SPD_ADJ_SOC_NUM ADC_SOC_NUM9 + +#define ADC_HANDLE g_adc2 +#endif + +#define APT_PWM_FREQ 12000 /* PWM frequency 12K Hz. */ +#define CTRL_CURR_PERIOD (1.0f / APT_PWM_FREQ) /* carrier ISR period (S) */ +#define CTRL_CURE_PERIOD_US 83 + +#define SYSTICK_PERIOD_US 500u /* systick period. unit : us */ + +#define INV_CAP_CHARGE_MS 3u /* Bootstrap capacitor charge time. unit : ms */ + +#define CTRL_SYSTICK_PERIOD 0.0005f /* systick control period, 500us */ + +#define USER_SPD_SLOPE 60.0f /* slope of velocity change */ + +#define IN_VOLTAGE_BUS 24 /* Motor input voltage */ +#define POLES 14 /* logarithm of motor pole */ +#define MATH_PI 3.14 /* Pi */ +#define MOTOR_K 0.66 /* Torque Coefficient */ + +#define RAMP_STP 60 /* Slope of forced draging acceleration */ +#define RAMP_DUTY_PWM 0.5 /* 1.0% */ + +#define FORCE_DRAG_MINDUTY 10 /* APT minimum duty cycle during forced drag */ +#define FORCE_DRAG_MAXDUTY 15 /* APT maximum duty cycle during forced drag */ + +#define DRAG_START_INTERVAL 1000 /* Force drag change phase time */ +#define DRAG_STOP_INTERVAL 400 /* Force drag change phase time */ + +/* Parameters of the motor in the RUN */ +#define FILTER_COUNT 3 /* Filter Times */ +#define PHASE_OFFSET 9000 /* Phase delay due to filtering */ + +#define APT_DUTYLIMIT_MAX 99.9 /* Maximum duty cycle of the output APT */ +#define APT_DUTYLIMIT_MIN 8.0 /* Minimum duty cycle of the output APT */ + +#define BRIDGE_CTR_APT_U APT0 /* APT address that controls the U phase */ +#define BRIDGE_CTR_APT_V APT1 /* APT address that controls the V phase */ +#define BRIDGE_CTR_APT_W APT2 /* APT address that controls the W phase */ + +#define SDP_MAX_VALUE 77.00 /* Maximum change phase frequency */ +#define SDP_MIN_VALUE 12.0 /* Minimum change phase frequency */ +#define SDP_TARGET_VALUE 77.00 /* Target change phase frequency */ + +/* SPD PID Param */ +#define SPD_PID_KP 0.05 /* P parameter of PID control */ +#define SPD_PID_KI 6 /* I parameter of PID control */ +#define SPD_PID_TS 0.0005 /* TS parameter of PID control cycle */ + +#define OP_TO_CL_INTERGRAL 8.0 /* Open-loop switching closed-loop integral term to prevent sudden current change. */ + +#define VOL_DIVIDER_COEFFICIENT 0.09091f /* Division coefficient of the zero-crossing detection sampling circuit */ + +#define SPD_FILTER_FC 30 + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c new file mode 100644 index 00000000..7779fbef --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.c @@ -0,0 +1,224 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.c + * @author MCU Algorithm Team + * @brief This file provides carrier interrupt application for motor control. + */ + +#include "mcs_carrier.h" +#include "mcs_user_config.h" +#include "mcs_assert.h" +#include "debug.h" + +#define S_TO_US 1000000 +#define S_TO_SYSTICK 100000000 + +/** + * @brief Sets the duty cycle of the H-bridge APT. + * @param aptHandle APT module handle. + * @param duty PWM duty. Range: 0.1 ~ 99.9. + * @retval None. + */ +void MCS_SetCtrAptDuty(MtrCtrlHandle *mtrCtrl, unsigned int duty) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(duty > 0); + /* Set pwm duty of uvw pahse */ + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.u, duty); + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.v, duty); + HAL_APT_SetPWMDutyByNumber(mtrCtrl->stepCtrl.controlApt.w, duty); +} + +/** + * @brief Strong drag start. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ForceDragAcc(MtrCtrlHandle *mtrCtrl) +{ + /* Verifying Parameters. */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + unsigned int voltageDValue; + unsigned int dragChangeFreq; + unsigned int timerperiod; + unsigned int freqLast; + unsigned int aptCountsOneUs; + + mtrCtrl->sysVar.accTimeCnt++; + if (mtrCtrl->sysVar.accTimeCnt < mtrCtrl->sysVar.dragChangePhaseTime) { + return; + } + + mtrCtrl->sysVar.accTimeCnt = 0; + /* Step 1: Calculate the voltage difference. */ + voltageDValue = IN_VOLTAGE_BUS * RAMP_DUTY_PWM; + /* Step 2: Calculate the commutation frequency. */ + freqLast = S_TO_US / (mtrCtrl->sysVar.dragChangePhaseTime * CTRL_CURE_PERIOD_US); + dragChangeFreq = voltageDValue * STEP_MAX_NUM * POLES / (MOTOR_K * 2 * MATH_PI) + freqLast; /* 2*PI = 360° */ + /* Step 3: Convert the commutation frequency to the commutation count value. */ + timerperiod = mtrCtrl->stepCtrl.controlApt.u->waveform.timerPeriod * CTRL_CURE_PERIOD_US; + mtrCtrl->sysVar.dragChangePhaseTime = S_TO_US / (timerperiod * dragChangeFreq); + + /* Determine whether the change phase speed has reached the speed of stopping forced drag. */ + if (mtrCtrl->sysVar.dragChangePhaseTime < DRAG_STOP_INTERVAL) { + mtrCtrl->sysVar.dragChangePhaseTime = DRAG_STOP_INTERVAL; + mtrCtrl->sysVar.accTimeCnt = 0; + mtrCtrl->sysVar.bemfFilterCnt = 0; + mtrCtrl->stateMachine = FSM_RUN; + mtrCtrl->sysVar.lastZeroPoint = DCL_SYSTICK_GetTick(); + mtrCtrl->spdPi.integral = OP_TO_CL_INTERGRAL; + } + + /* Shorten the time interval of forced drag change phase. */ + mtrCtrl->pwmDuty += RAMP_DUTY_PWM; + aptCountsOneUs = HAL_CRG_GetIpFreq(APT0_BASE) / S_TO_US; + mtrCtrl->sysVar.waitTime = (mtrCtrl->sysVar.dragChangePhaseTime * CTRL_CURE_PERIOD_US * aptCountsOneUs) >> 1; + /* Change phase time is 2 the waiting time. */ + mtrCtrl->spdRefHz = (float)(HAL_CRG_GetIpFreq(SYSTICK_BASE) / (mtrCtrl->sysVar.waitTime * 2)) / STEP_MAX_NUM; + mtrCtrl->spdEstHz = mtrCtrl->spdRefHz; + mtrCtrl->spdRmg.yLast = mtrCtrl->spdRefHz; + mtrCtrl->stepCtrl.phaseStep = (mtrCtrl->stepCtrl.phaseStep + 1) % STEP_MAX_NUM; + SixStepPwm(&mtrCtrl->stepCtrl); + /* Limiting the PWM Duty Cycle Range. */ + if (mtrCtrl->pwmDuty > FORCE_DRAG_MAXDUTY) { + mtrCtrl->pwmDuty = FORCE_DRAG_MAXDUTY; + } + if (mtrCtrl->pwmDuty < FORCE_DRAG_MINDUTY) { + mtrCtrl->pwmDuty = FORCE_DRAG_MINDUTY; + } + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); +} + +/** + * @brief Zero-crossing filter. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void BemfZeroSampleFilter(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysVar.bemfFilterCnt++; + /* Filter the number of samples. */ + if (mtrCtrl->sysVar.bemfFilterCnt >= FILTER_COUNT) { + mtrCtrl->sysVar.bemfFilterCnt = 0; + unsigned int currentTick = DCL_SYSTICK_GetTick(); + if (mtrCtrl->sysVar.firstEventFilterFlag == 0) { + mtrCtrl->sysVar.lastZeroPoint = currentTick; + mtrCtrl->sysVar.changePhaseFlag = 1; + mtrCtrl->sysVar.firstEventFilterFlag = 1; + return; + } + /* Calculate the time interval between the last zero crossing. */ + mtrCtrl->sysVar.stepTime[mtrCtrl->stepCtrl.phaseStep] = currentTick >= mtrCtrl->sysVar.lastZeroPoint + ? currentTick - mtrCtrl->sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - mtrCtrl->sysVar.lastZeroPoint + currentTick + 1; + mtrCtrl->sysVar.stepTimeNum++; + /* Wait time is half the interval. */ + mtrCtrl->sysVar.waitTime = mtrCtrl->sysVar.stepTime[mtrCtrl->stepCtrl.phaseStep] >> 1; + mtrCtrl->sysVar.waitTime -= PHASE_OFFSET; + mtrCtrl->sysVar.lastZeroPoint = currentTick; + /* Update flag. */ + mtrCtrl->sysVar.changePhaseFlag = 1; + } +} + +/** + * @brief Back EMF zero crossing check. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void BemfZeroCheck(MtrCtrlHandle *mtrCtrl) +{ + /* The step corresponds to different conditional judgments. */ + unsigned int bemfCheckTable[STEP_MAX_NUM] = {mtrCtrl->bemf.w < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.v > mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.u < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.w > mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.v < mtrCtrl->zeroPoint ? 1 : 0, + mtrCtrl->bemf.u > mtrCtrl->zeroPoint ? 1 : 0}; + + if (bemfCheckTable[mtrCtrl->stepCtrl.phaseStep] == 1) { + BemfZeroSampleFilter(mtrCtrl); + } +} + +/** + * @brief Change phase and speed estimation. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ChangePhase(MtrCtrlHandle *mtrCtrl) +{ + unsigned int currentTick = DCL_SYSTICK_GetTick(); /* Get the current tick value. */ + unsigned int intervalTick = (currentTick >= mtrCtrl->sysVar.lastZeroPoint) + ? currentTick - mtrCtrl->sysVar.lastZeroPoint + : SYSTICK_MAX_VALUE - mtrCtrl->sysVar.lastZeroPoint + currentTick + 1; + /* Start average filtering when the number of recorded data reaches six. */ + if (mtrCtrl->sysVar.stepTimeNum >= STEP_MAX_NUM) { + mtrCtrl->sysVar.stepTimeNum = 0; + mtrCtrl->sysVar.stepTimeFilterEnable = 1; + } + /* If the accumulated time is greater than the waiting commutation time, commutation is performed. */ + if (intervalTick > mtrCtrl->sysVar.waitTime) { + if (mtrCtrl->sysVar.stepTimeFilterEnable) { /* 6-step commutation time averaging if filtering is enabled. */ + unsigned int totalTime = mtrCtrl->sysVar.stepTime[STEP1] + mtrCtrl->sysVar.stepTime[STEP2] + + mtrCtrl->sysVar.stepTime[STEP3] + mtrCtrl->sysVar.stepTime[STEP4] + + mtrCtrl->sysVar.stepTime[STEP5] + mtrCtrl->sysVar.stepTime[STEP6]; + mtrCtrl->spdEstHz = (float)HAL_CRG_GetIpFreq(SYSTICK_BASE) / totalTime; + } else { + mtrCtrl->spdEstHz = (float)HAL_CRG_GetIpFreq(SYSTICK_BASE) / (mtrCtrl->sysVar.waitTime << 1) / STEP_MAX_NUM; + } + /* Change phase. */ + mtrCtrl->stepCtrl.phaseStep = (mtrCtrl->stepCtrl.phaseStep + 1) % STEP_MAX_NUM; + SixStepPwm(&mtrCtrl->stepCtrl); + mtrCtrl->sysVar.changePhaseFlag = 0; + } +} + +/** + * @brief Zero-crossing detection and change phase + * @param mtrCtrl The motor control handle. + * @retval None. + */ +void MCS_CarrierProcess(MtrCtrlHandle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* Offset value of the calibration value of the three-phase current */ + + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + ForceDragAcc(mtrCtrl); /* Forced drag. */ + break; + + case FSM_RUN: + case FSM_WAIT_STOP: + mtrCtrl->readBemfUVW(&mtrCtrl->bemf); + MCS_SetCtrAptDuty(mtrCtrl, mtrCtrl->pwmDuty); + if (mtrCtrl->sysVar.changePhaseFlag) { + /* Change phase process. */ + ChangePhase(mtrCtrl); + } else { + /* Zero-crossing detection procedure. */ + BemfZeroCheck(mtrCtrl); + } + break; + + default: + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h new file mode 100644 index 00000000..05fc2666 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_carrier.h @@ -0,0 +1,91 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration for carrier interrupt processing function. + */ +#ifndef McuMagicTag_MCS_CARRIER_H +#define McuMagicTag_MCS_CARRIER_H + +#include "mcs_status.h" +#include "mcs_six_step.h" +#include "mcs_ramp_mgmt.h" +#include "mcs_spd_ctrl.h" +#include "mcs_fsm.h" + +/** + * @brief Three-phase static coordinate frame variable. + */ +typedef struct { + unsigned int u; /**< Component u of the three-phase static coordinate frame variable. */ + unsigned int v; /**< Component v of the three-phase static coordinate frame variable. */ + unsigned int w; /**< Component w of the three-phase static coordinate frame variable. */ +} UVWBemf; + +typedef void (*ReadBemf)(UVWBemf *bemfUVW); + +/** + * @brief The definition of the systematic global variables + */ +typedef struct { + unsigned char changePhaseFlag; /**< Flag indicating that delay change phase is required */ + unsigned char firstEventFilterFlag; /**< First zero-crossing event filtering flag. */ + unsigned int dragChangePhaseTime; /**< Interval for forced drag acceleration */ + unsigned int accTimeCnt; /**< Acceleration time count */ + + unsigned int bemfFilterCnt; /**< Number of sample filtering times for zero-crossing detection. */ + + unsigned int lastZeroPoint; /**< Time of the last zero point */ + unsigned int waitTime; /**< Time to wait for change phase */ + unsigned int stepTime[STEP_MAX_NUM]; /**< Record the time spent on each step */ + unsigned int stepTimeNum; /**< Number of data records in the steptime array. */ + unsigned int stepTimeFilterEnable; +} SysVariable; + +typedef struct { + volatile float spdCmdHz; /**< Set target change phase frequency */ + float spdRefHz; /**< Command values after speed ramp management */ + float spdEstHz; /**< Actual change phase frequency of feedback */ + float pwmDuty; /**< APT duty cycle */ + unsigned int zeroPoint; /**< Adc value of zero point */ + + unsigned short aptMaxcntCmp; /**< Apt Maximum Comparison Count */ + + unsigned short sysTickCnt; /**< System Timer Tick Count */ + unsigned short capChargeTickNum; /**< Bootstrap Capacitor Charge Tick Count */ + unsigned short msTickNum; /**< Number of ticks corresponding to 1 ms */ + volatile unsigned int msTickCnt; /**< Millisecond-level counter, which can be used in 1-ms and 5-ms tasks. */ + + RMG_Handle spdRmg; /**< Ramp management struct for the speed controller input reference */ + PID_Handle spdPi; /**< PI controller struct in the speed controller. */ + + UVWBemf bemf; /**< Three-phase back electromotive force */ + SixStepHandle stepCtrl; /**< Control structure of six-step square wave */ + + SysVariable sysVar; /**< System Variables */ + SysStatusReg statusReg; /**< System Status */ + FsmState stateMachine; /**< BLDC Motor Control State Machine */ + + ReadBemf readBemfUVW; /**< Function interface for obtaining the three-phase electromotive force */ +} MtrCtrlHandle; + +void MCS_CarrierProcess(MtrCtrlHandle *mtrCtrl); + +void MCS_SetCtrAptDuty(MtrCtrlHandle *mtrCtrl, unsigned int duty); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h new file mode 100644 index 00000000..b3c79ea2 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/common/mcs_fsm.h @@ -0,0 +1,55 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_fsm.h + * @author MCU Algorithm Team + * @brief This file provides the definition of finite statemachine (FSM). + */ + +#ifndef McuMagicTag_MCS_FSM_H +#define McuMagicTag_MCS_FSM_H + +/** + * @brief motor control FSM state define. + * @details motor control FSM state type: + * + FSM_IDLE -- IDLE state, system startup default. + * + FSM_OFFSET_CALIB -- Self calibrate, for ADC init. + * + FSM_CAP_CHARGE -- IPM cap charge. + * + FSM_CLEAR -- Clear before every run. + * + FSM_LOCATE -- Rotor position pre-locate. + * + FSM_STARTUP -- Start up. + * + FSM_SWITCH -- Transition state, control from open to closed loop. + * + FSM_RUN -- Normal running state. + * + FSM_WAIT_STOP -- Wait stopping. + * + FSM_STOP -- Normal stop. + * + FSM_FAULT -- Fault state, waiting for user process. + */ +typedef enum { + FSM_IDLE = 0, + FSM_OFFSET_CALIB, + FSM_CAP_CHARGE, + FSM_CLEAR, + FSM_LOCATE, + FSM_STARTUP, + FSM_SWITCH, + FSM_RUN, + FSM_WAIT_STOP, + FSM_STOP, + FSM_FAULT +} FsmState; + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c new file mode 100644 index 00000000..c86e609c --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.c @@ -0,0 +1,126 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_six_step.c + * @author MCU Algorithm Team + * @brief This file provides functions to control the H bridge. + */ + +#include "mcs_assert.h" +#include "mcs_six_step.h" + +/* Mode for disabling or enabling software-based forced output */ +#define APT_PWM_MODE 0 +#define APT_FRC_MODE 1 + +#define PWM_SIGNAL 1 + +#define FRC_LOW APT_OUT_CTRL_ACTION_LOW +#define FRC_HIGH APT_OUT_CTRL_ACTION_HIGH + +/** + * @brief Force PWM output by APT + * @param APTx The APT to use + * @param PwmAout Force to be high or low + * @param PwmAenble PWMA signal software force mode + * @param PwmBout Force to be high or low + * @param PwmBenble PWMB signal software force mode + */ +static void APT_ForcePwmByApt(APT_RegStruct *aptx, APT_Act actMode) +{ + MCS_ASSERT_PARAM(aptx != NULL); + switch (actMode) { + case APT_CHA_PWM_CHB_LOW: + /* Channel A: 0 means not force output enable, channel A output PWM. */ + DCL_APT_DisableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + /* Channel B: 2 means channel B force output LOW due to the A_H_B_L invert. */ + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_HIGH); + break; + case APT_CHA_LOW_CHB_HIGH: + /* Channel A: 1 means force output enable. */ + /* Channel A: 1 means channel A force output LOW. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + /* Channel B: 2 means channel B force output HIGH. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_HIGH); + break; + case APT_CHA_LOW_CHB_LOW: + /* Channel A: 1 means force output enable. */ + /* Channel A: 1 means channel A force output LOW. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_A, APT_PWM_CONTINUOUS_ACTION_LOW); + /* Channel B: 1 means force output enable. */ + /* Channel B: 1 means channel A force output HIGH due to the A_H_B_L invert. */ + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_SetSwContPWMAction(aptx, APT_PWM_CHANNEL_B, APT_PWM_CONTINUOUS_ACTION_LOW); + break; + default: + break; + } +} + +/** + * @brief Output six-step square wave. + * @param handle The SixStepHandle. + * @retval None. + */ +void SixStepPwm(const SixStepHandle *handle) +{ + MCS_ASSERT_PARAM(handle != NULL); + APT_RegStruct *aptU = handle->controlApt.u->baseAddress; /* Get apt u\v\w baseaddress. */ + APT_RegStruct *aptV = handle->controlApt.v->baseAddress; + APT_RegStruct *aptW = handle->controlApt.w->baseAddress; + switch (handle->phaseStep) { + case STEP1: /* U+, V- */ + APT_ForcePwmByApt(aptU, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_HIGH); + break; + case STEP2: /* U+, W- */ + APT_ForcePwmByApt(aptU, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_LOW); + break; + case STEP3: /* V+, W- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptV, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_LOW); + break; + case STEP4: /* V+, U- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_PWM_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_LOW_CHB_HIGH); + break; + case STEP5: /* W+, U- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptW, APT_CHA_PWM_CHB_LOW); + break; + case STEP6: /* W+, V- */ + APT_ForcePwmByApt(aptU, APT_CHA_LOW_CHB_HIGH); + APT_ForcePwmByApt(aptV, APT_CHA_LOW_CHB_LOW); + APT_ForcePwmByApt(aptW, APT_CHA_PWM_CHB_LOW); + break; + default: + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h new file mode 100644 index 00000000..08198c4c --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_six_step.h @@ -0,0 +1,79 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_six_step.c + * @author MCU Algorithm Team + * @brief The header file contains the following declaration: + * + StepEnum enum definition. + * + PhaseEnum enum definition. + * + UVW_AptReg structure definition. + * + SixStepHandle handle structure definition. + * + AptOutCombination structure definition. + * + Six Step Pwm Function And Six Step Pwm Overlap Function. + */ + +#ifndef MCS_SIX_STEP_H +#define MCS_SIX_STEP_H + +#include "apt.h" + +typedef enum { + STEP1 = 0, + STEP2, + STEP3, + STEP4, + STEP5, + STEP6, + STEP_MAX_NUM +} StepEnum; + +typedef enum { + U = 0, + V, + W, + PHASE_MAX_NUMS +} PhaseEnum; + +typedef enum { + APT_CHA_PWM_CHB_LOW, + APT_CHA_LOW_CHB_HIGH, + APT_CHA_LOW_CHB_LOW +} APT_Act; + +/** + * @brief Three-phase static coordinate frame variable. + */ +typedef struct { + APT_Handle *u; /**< Apt handle for controlling phase U. */ + APT_Handle *v; /**< Apt handle for controlling phase V. */ + APT_Handle *w; /**< Apt handle for controlling phase W. */ +} UVW_AptReg; + +typedef struct { + unsigned char phaseStep; /* Current step. */ + UVW_AptReg controlApt; /* Apt handles for controlling H bridge. */ +} SixStepHandle; + +typedef struct { + unsigned int upperout; /* High tube level */ + unsigned int upperstate; /* High tube state */ + unsigned int lowerout; /* Low tube level */ + unsigned int lowerstate; /* Low tube state */ +} AptOutCombination; + +void SixStepPwm(const SixStepHandle *handle); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h new file mode 100644 index 00000000..d92ed312 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/func/mcs_status.h @@ -0,0 +1,188 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_status.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_STATUS_H +#define McuMagicTag_MCS_STATUS_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "typedefs.h" +#include "mcs_assert.h" + +/* Typedef definitions ------------------------------------------------------------------------- */ +/** + * @brief System status define + */ +typedef union { + unsigned short all; + struct { + unsigned short cmdStart : 1; /**< Indicates that a start system command has been received. */ + unsigned short cmdStop : 1; /**< Indicates that a stop system command has been received. */ + unsigned short isRunning : 1; /**< Indicates that the system is running (enable signal) */ + unsigned short sysError : 1; /**< Indicates that the system reports an error. */ + unsigned short poweron : 1; /**< Indicates that the power-on initialization phase is complete. */ + unsigned short capcharge : 1; /**< Indicates that the bootstrap capacitor charging phase is complete. */ + unsigned short adczero : 1; /**< The current sampling point is reset to zero after power-on. */ + } BIT; +} SysStatusReg; + +/** + * @brief Get status of BIT cmdStart. + * @param sysStatus System status register handle. + * @retval Status of BIT cmdStart. + */ +static inline bool SysGetCmdStart(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.cmdStart == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT cmdStart. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStartSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStart = 1; +} + +/** + * @brief Clear BIT cmdStart. + * @param handle System status register handle. + * @retval None. + */ +static inline void SysCmdStartClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStart = 0; +} + +/** + * @brief Get status of BIT cmdStop. + * @param sysStatus System status register handle. + * @retval Status of BIT cmdStart. + */ +static inline bool SysGetCmdStop(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.cmdStop == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStop = 1; +} + +/** + * @brief Clear BIT cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.cmdStop = 0; +} + +/** + * @brief Get status of BIT isRunning. + * @param sysStatus System status register handle. + * @retval Status of BIT isRunning. + */ +static inline bool SysIsRunning(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.isRunning == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.isRunning = 1; +} + +/** + * @brief Clear BIT isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.isRunning = 0; +} + +/** + * @brief Get status of BIT sysError. + * @param sysStatus System status register handle. + * @retval Status of BIT sysError. + */ +static inline bool SysIsError(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->BIT.sysError == 1) ? true : false; + return ret; +} + +/** + * @brief Set BIT sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.sysError = 1; +} + +/** + * @brief Clear BIT sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->BIT.sysError = 0; +} + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/readme.md b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/readme.md new file mode 100644 index 00000000..2e0a0107 --- /dev/null +++ b/vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/readme.md @@ -0,0 +1,13 @@ +# Bldc_Sensorless_Six_Step_Wave + +**【功能描述】** ++ 基于反电动势采样的无感电机六步方波调速系统应用 + +**【环境要求】** ++ 所用单板电源为12V低压,电机选用GBM2804H-100T云台电机 + +**【IDE配置方法】** ++ chipConfig中的sample栏目里面选中Bldc Sensorless Six Step Wave示例,然后点击生成代码即可 + +**【注意事项】** ++ 供电电源12V \ No newline at end of file diff --git a/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/feature.h b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/feature.h new file mode 100644 index 00000000..8831ce2a --- /dev/null +++ b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/feature.h @@ -0,0 +1,120 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-25 10:40:20 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define CHIP_3061MNPICA MACRO_ENABLE + +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +#define MCS_PARAM_CHECK MACRO_ENABLE +#define APT_PARAM_CHECK MACRO_ENABLE +#define ADC_PARAM_CHECK MACRO_ENABLE +#define CAPM_PARAM_CHECK MACRO_ENABLE +#define CRG_PARAM_CHECK MACRO_ENABLE +#define I2C_PARAM_CHECK MACRO_ENABLE +#define UART_PARAM_CHECK MACRO_ENABLE +#define SPI_PARAM_CHECK MACRO_ENABLE +#define TIMER_PARAM_CHECK MACRO_ENABLE +#define IWDG_PARAM_CHECK MACRO_ENABLE +#define WWDG_PARAM_CHECK MACRO_ENABLE +#define GPIO_PARAM_CHECK MACRO_ENABLE +#define GPT_PARAM_CHECK MACRO_ENABLE +#define DMA_PARAM_CHECK MACRO_ENABLE +#define CRC_PARAM_CHECK MACRO_ENABLE +#define CFD_PARAM_CHECK MACRO_ENABLE +#define CMM_PARAM_CHECK MACRO_ENABLE +#define CAN_PARAM_CHECK MACRO_ENABLE +#define FLASH_PARAM_CHECK MACRO_ENABLE +#define PMC_PARAM_CHECK MACRO_ENABLE +#define ACMP_PARAM_CHECK MACRO_ENABLE +#define DAC_PARAM_CHECK MACRO_ENABLE +#define PGA_PARAM_CHECK MACRO_ENABLE +#define IOCMG_PARAM_CHECK MACRO_ENABLE +#define QDM_PARAM_CHECK MACRO_ENABLE + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 30000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_UART_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/ifd.c b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/ifd.c new file mode 100644 index 00000000..7eaae94e --- /dev/null +++ b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/ifd.c @@ -0,0 +1,297 @@ +#include "ifd.h" +#include "debug.h" +#include "main.h" +#include "string.h" +#define RESET 0 +#define SET 1 + +#define IR_IN HAL_GPIO_GetPinValue(&g_gpio2, GPIO_PIN_2) // PA1 红外接收DQ引脚 +unsigned char ir_code[4]; // 解码值保存变量 +unsigned char ir_decode_ok_flag = RESET; // 解码成功标志位 +unsigned char key_data=0; +static unsigned char bit_value = 0; + +/* + NEC红外编码: 引导码 + 地址码 + 地址码(取反) + 数据 + 数据(取反) + 引导吗:0.56ms(低电平) + 2.25ms(高电平) + 数据1: 0.56ms(低电平) + 1.12ms(高电平) +*/ +// 红外解码程序,100us定期执行就可以,将该函数放在100us的定时器中即可。 + + + +void Ir_Decode(void) +{ + static unsigned int l_cnt = 0; // 低电平时间计数 + static unsigned int h_cnt = 0; // 高电平时间计数 + static unsigned int l_cnt_save = 0; // 保存低电平时长 + static unsigned int h_cnt_save = 0; // 保存高电平时长 + static unsigned char falling_edge_valid_flag = RESET; // IR电平由高变低标志位 + static unsigned char rcv_sync_ok_flag = RESET; // 同步码接收成功标志位 + static unsigned char bit_value = 0; // 位解码值 + static unsigned char bit_rcv_cnt = 0; // 位接收个数变量 + + + if( RESET == IR_IN ) + { + if( 0 == l_cnt ) // IR由高变低后立马记录上次测得的高电平时长 + { + h_cnt_save = h_cnt; + falling_edge_valid_flag = SET; + } + + + l_cnt ++; + if( l_cnt > 1600 ) // 防止计数溢出 + { + l_cnt = 1600; + } + h_cnt = 0; // 计数清零 + + } + else + { + if( 0 == h_cnt ) // IR由低变高后立马记录上次测得的低电平时长 + { + l_cnt_save = l_cnt; + } + + h_cnt ++; + if( h_cnt > 1600 ) // 防止计数溢出 + { + h_cnt = 1600; + } + + l_cnt = 0; // 计数清零 + + + if(ir_decode_ok_flag == 1) + { + if(h_cnt > 1200) + ir_decode_ok_flag = 2; // 短按 + } + + } + + + if( SET == falling_edge_valid_flag ) + { + falling_edge_valid_flag = RESET; + + /* 位解码 */ + if( ((l_cnt_save >= 3)&&(l_cnt_save <= 9)) && // 560us低电平, 560us高电平 + ((h_cnt_save >= 3)&&(h_cnt_save <= 9)) ) + { + bit_value = 0; + } + else if( ((l_cnt_save >= 3)&&(l_cnt_save <= 9)) && // 560us低电平,1680us高电平 + ((h_cnt_save >= 14)&&(h_cnt_save <= 20)) ) + { + bit_value = 1; + } + else + { + bit_value = 2; + } + + if( SET == rcv_sync_ok_flag ) + { + if((1 == bit_value) || (0 == bit_value) ) + { + if( bit_rcv_cnt < 8 ) + { + ir_code[0] |= (bit_value<< (bit_rcv_cnt%8)); + } + else if( bit_rcv_cnt < 16 ) + { + ir_code[1] |= (bit_value<< (bit_rcv_cnt%8)); + } + else if( bit_rcv_cnt < 24 ) + { + ir_code[2] |= (bit_value<< (bit_rcv_cnt%8)); + } + else if( bit_rcv_cnt < 32 ) + { + ir_code[3] |= (bit_value<< (bit_rcv_cnt%8)); + } + + if( bit_rcv_cnt >= 31 ) + { + ir_decode_ok_flag = SET; + rcv_sync_ok_flag = RESET; + } + + bit_rcv_cnt ++; + } + else + { + rcv_sync_ok_flag = RESET; // 位接收错误,重新解码 + } + } + + if( ((l_cnt_save >= 87)&&(l_cnt_save <= 93)) && + ((h_cnt_save >= 42)&&(h_cnt_save <= 48)) ) // 同步码,9ms低电平,4.5ms高电平 + { + rcv_sync_ok_flag = SET; + bit_rcv_cnt = 0; + ir_code[0] = 0; + ir_code[1] = 0; + ir_code[2] = 0; + ir_code[3] = 0; + } + else if(((l_cnt_save >= 87)&&(l_cnt_save <= 93)) && + ((h_cnt_save >= 20)&&(h_cnt_save <= 25)) ) + { + DBG_PRINTF("repeate code\r\n"); + ir_decode_ok_flag = 3; //长按 + } + + } +} + +//获取红外键值 +/* +KEY_OK = 28, +KEY_UP =24, +KEY_DOWN = 82 +KEY_LEFT = 8, +KEY_RIGHT =90, +KEY_1 = 69, +KEY_2 = 70, +KEY_3 = 71, +KEY_4 = 68, +KEY_5 = 64, +KEY_6 = 67, +KEY_7 = 7, +KEY_8 = 21, +KEY_9 =9, +KEY_0 = 25, +KEY_*=22 +KEY_# =13 +*/ + +unsigned char Remote_Scan(void) +{ + unsigned char key_value = 0; + + + // 校验地址码和命令码 + if((ir_code[0] == (unsigned char)~ir_code[1]) && + (ir_code[2] == (unsigned char)~ir_code[3])) + { + key_value = ir_code[2]; // 返回键值 + memset(ir_code, 0, sizeof(ir_code)); + } + + switch(key_value) + { + case 69: + DBG_PRINTF("1\r\n");//显示1 + break; + + case 70: + DBG_PRINTF("2\r\n");//显示2 + break; + + case 71: + DBG_PRINTF("3\r\n");//显示3 + break; + + case 68: + DBG_PRINTF("4\r\n");//显示4 + break; + + case 64: + DBG_PRINTF("5\r\n");//显示5 + break; + + case 67: + DBG_PRINTF("6\r\n");//显示6 + break; + + case 7: + DBG_PRINTF("7\r\n");//显示7 + break; + + case 21: + DBG_PRINTF("8\r\n");//显示8 + break; + + case 9: + DBG_PRINTF("9\r\n");//显示9 + break; + + case 25: + DBG_PRINTF("0\r\n");//显示0 + break; + + case 22: + DBG_PRINTF("*\r\n");//显示ASCII字符 + break; + + case 13: + DBG_PRINTF("#\r\n");//显示ASCII字符 + break; + + case 24: + + DBG_PRINTF("UP\r\n");//显示ASCII字符 + break; + + case 8: + DBG_PRINTF("LEFT\r\n");//显示ASCII字符 + break; + + case 82: + + DBG_PRINTF("DOWN\r\n");//显示ASCII字符 + + break; + + case 90: + DBG_PRINTF("RIGHT\r\n");//显示ASCII字符 + break; + + case 28: + DBG_PRINTF("OK\r\n"); + break; + + default: + + break; + } + + + return key_value; +} + + + + + +void TIMER2_InterruptProcess(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN TIMER2_InterruptProcess */ + Ir_Decode(); + key_data=Remote_Scan(); + + + /* USER CODE END TIMER2_InterruptProcess */ +} + + + + + + + + + + + + + + + + diff --git a/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/ifd.h b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/ifd.h new file mode 100644 index 00000000..faa038d5 --- /dev/null +++ b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/ifd.h @@ -0,0 +1,33 @@ +#ifndef __IR_H +#define __IR_H +extern unsigned char ir_code[4]; +extern unsigned char key_data; +void Ir_Decode(void); + +unsigned char Remote_Scan(void); + + + + + + + + + + + + + + + + +#endif + + + + + + + + + diff --git a/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/main.h b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/main.h new file mode 100644 index 00000000..e26db1d4 --- /dev/null +++ b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/main.h @@ -0,0 +1,67 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.h + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-25 10:40:20 + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_SYSTEM_INIT_H +#define McuMagicTag_SYSTEM_INIT_H + +#include "uart.h" +#include "uart_ex.h" +#include "gpio.h" +#include "timer.h" +#include "timer_ex.h" +#include "crg.h" +#include "iocmg.h" + +#define IO_SPEED_FAST 0x00U +#define IO_SPEED_SLOW 0x01U + +#define IO_DRV_LEVEL4 0x00U +#define IO_DRV_LEVEL3 0x01U +#define IO_DRV_LEVEL2 0x02U +#define IO_DRV_LEVEL1 0x03U + +#define XTAL_DRV_LEVEL4 0x03U +#define XTAL_DRV_LEVEL3 0x02U +#define XTAL_DRV_LEVEL2 0x01U +#define XTAL_DRV_LEVEL1 0x00U + +#define ir_PIN GPIO_PIN_2 +#define ir_HANDLE g_gpio2 + +extern TIMER_Handle g_timer2; +extern UART_Handle g_uart0; + +extern GPIO_Handle g_gpio2; + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect); +void SystemInit(void); + +void TIMER2_InterruptProcess(void *handle); +void TIMER2_DMAOverFlow_InterruptProcess(void *handle); + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_SYSTEM_INIT_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/demo/sample_gpio_key/generatecode/system_init.c b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/system_init.c similarity index 62% rename from vendor/yibaina_3061M/demo/sample_gpio_key/generatecode/system_init.c rename to vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/system_init.c index 24a14c9c..bcc2d324 100644 --- a/vendor/yibaina_3061M/demo/sample_gpio_key/generatecode/system_init.c +++ b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/generatecode/system_init.c @@ -18,13 +18,14 @@ * @file system_init.c * @author MCU Driver Team * @brief This file contains driver init functions. + * @date 2025-04-25 10:40:20 */ #include "main.h" #include "ioconfig.h" #include "iocmg_ip.h" -#define UART0_BAND_RATE 115200 +#define UART0_BAUD_RATE 115200 BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) { @@ -46,37 +47,55 @@ BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) return BASE_STATUS_OK; } -__weak void GPIO_CallBackFunc(void *param) -{ - GPIO_Handle *handle = (GPIO_Handle *)param; - BASE_FUNC_UNUSED(handle); -} - static void GPIO_Init(void) { HAL_CRG_IpEnableSet(GPIO2_BASE, IP_CLK_ENABLE); g_gpio2.baseAddress = GPIO2; - g_gpio2.pins = GPIO_PIN_4; + g_gpio2.pins = GPIO_PIN_2; HAL_GPIO_Init(&g_gpio2); HAL_GPIO_SetDirection(&g_gpio2, g_gpio2.pins, GPIO_INPUT_MODE); - HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_LOW_LEVEL); - HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_RISE_EDGE); - - HAL_GPIO_RegisterCallBack(&g_gpio2, GPIO_PIN_4, GPIO_CallBackFunc); - IRQ_Register(IRQ_GPIO2, HAL_GPIO_IrqHandler, &g_gpio2); - IRQ_SetPriority(IRQ_GPIO2, 1); /* set gpio1 interrupt priority to 1, 1~15. 1 is priority value */ - IRQ_EnableN(IRQ_GPIO2); /* gpio interrupt enable */ + HAL_GPIO_SetValue(&g_gpio2, g_gpio2.pins, GPIO_HIGH_LEVEL); + HAL_GPIO_SetIrqType(&g_gpio2, g_gpio2.pins, GPIO_INT_TYPE_NONE); return; } +__weak void TIMER2_InterruptProcess(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN TIMER2_InterruptProcess */ + /* USER CODE END TIMER2_InterruptProcess */ +} + +static void TIMER2_Init(void) +{ + HAL_CRG_IpEnableSet(TIMER2_BASE, IP_CLK_ENABLE); /* TIMER2 clock enable. */ + unsigned int load = ((float)HAL_CRG_GetIpFreq((void *)TIMER2) / (1u << (TIMERPRESCALER_NO_DIV * 4)) / 1000000u) * 100; + + g_timer2.baseAddress = TIMER2; + g_timer2.load = (load < 1) ? 0 : (load - 1); /* Set timer value immediately */ + g_timer2.bgLoad = (load < 1) ? 0 : (load - 1); /* Set timer value */ + g_timer2.mode = TIMER_MODE_RUN_PERIODIC; /* Run in period mode */ + g_timer2.prescaler = TIMERPRESCALER_NO_DIV; /* Don't frequency division */ + g_timer2.size = TIMER_SIZE_32BIT; /* 1 for 32bit, 0 for 16bit */ + g_timer2.interruptEn = BASE_CFG_ENABLE; + g_timer2.adcSocReqEnable = BASE_CFG_DISABLE; + g_timer2.dmaReqEnable = BASE_CFG_DISABLE; + HAL_TIMER_Init(&g_timer2); + IRQ_Register(IRQ_TIMER2, HAL_TIMER_IrqHandler, &g_timer2); + + HAL_TIMER_RegisterCallback(&g_timer2, TIMER_PERIOD_FIN, TIMER2_InterruptProcess); + IRQ_SetPriority(IRQ_TIMER2, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_TIMER2); +} + static void UART0_Init(void) { HAL_CRG_IpEnableSet(UART0_BASE, IP_CLK_ENABLE); /* UART0 clock enable. */ g_uart0.baseAddress = UART0; - g_uart0.baudRate = UART0_BAND_RATE; + g_uart0.baudRate = UART0_BAUD_RATE; g_uart0.dataLength = UART_DATALENGTH_8BIT; g_uart0.stopBits = UART_STOPBITS_ONE; g_uart0.parity = UART_PARITY_NONE; @@ -93,12 +112,24 @@ static void UART0_Init(void) static void IOConfig(void) { - /* Config PIN21 */ - HAL_IOCMG_SetPinAltFuncMode(GPIO2_4_AS_GPIO2_4); /* Check function selection */ - HAL_IOCMG_SetPinPullMode(GPIO2_4_AS_GPIO2_4, PULL_NONE); /* Pull-up and Pull-down */ - HAL_IOCMG_SetPinSchmidtMode(GPIO2_4_AS_GPIO2_4, SCHMIDT_DISABLE); /* Schmitt input on/off */ - HAL_IOCMG_SetPinLevelShiftRate(GPIO2_4_AS_GPIO2_4, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ - HAL_IOCMG_SetPinDriveRate(GPIO2_4_AS_GPIO2_4, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN36 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_0_AS_JTAG_TCK); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_0_AS_JTAG_TCK, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_0_AS_JTAG_TCK, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_0_AS_JTAG_TCK, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_0_AS_JTAG_TCK, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN37 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_1_AS_JTAG_TMS); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_1_AS_JTAG_TMS, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_1_AS_JTAG_TMS, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_1_AS_JTAG_TMS, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_1_AS_JTAG_TMS, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN34 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_2_AS_GPIO2_2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_2_AS_GPIO2_2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_2_AS_GPIO2_2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_2_AS_GPIO2_2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_2_AS_GPIO2_2, DRIVER_RATE_2); /* Output signal edge fast/slow */ /* Config PIN39 */ HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ @@ -117,6 +148,7 @@ void SystemInit(void) { IOConfig(); UART0_Init(); + TIMER2_Init(); GPIO_Init(); /* USER CODE BEGIN system_init */ diff --git a/vendor/yibaina_3061M/Infrared_Receiver_sample/user/main.c b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/main.c new file mode 100644 index 00000000..3467600b --- /dev/null +++ b/vendor/yibaina_3061M/Infrared_Receiver_sample/user/main.c @@ -0,0 +1,77 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + * @date 2025-04-25 10:37:42 + */ + +#include "typedefs.h" +#include "feature.h" +#include "main.h" +#include "debug.h" +#include "ifd.h" +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ +/* USER CODE END 0 */ +TIMER_Handle g_timer2; +UART_Handle g_uart0; +GPIO_Handle g_gpio2; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ +/* USER CODE END 1 */ + + + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + /* USER CODE END 2 */ + SystemInit(); + /* USER CODE BEGIN 3 */ + /* 建议用户放置初始配置代码 */ + HAL_TIMER_Start(&g_timer2); + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + /* 建议用户放置周期性执行代码 */ + // DBG_PRINTF("ir_code[0] :%d\r\n",ir_code[0]); + // DBG_PRINTF("ir_code[1] :%d\r\n",ir_code[1]); + // DBG_PRINTF("ir_code[2] :%d\r\n",ir_code[2]); + // DBG_PRINTF("ir_code[3] :%d\r\n",ir_code[3]); + // DBG_PRINTF("key_data:%d\r\n",key_data); + + + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ + + + + + diff --git a/vendor/yibaina_3061M/demo/sample_gpio_key/readme.md b/vendor/yibaina_3061M/demo/sample_gpio_key/readme.md deleted file mode 100644 index fb6ae936..00000000 --- a/vendor/yibaina_3061M/demo/sample_gpio_key/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# sample_gpio_key - -## 1.1 介绍 - -**功能介绍:** 基于HAL接口完成时钟、GPIO控制器初始化和功能配置。在示例代码中通过中断的方式实现对S2按键的检测。 - -**软件概述:** 使用中断方式实现按键功能。 - -**硬件概述:** 核心板。通过板端丝印可以看出S2按键的GPIO对应GPIO2_4。硬件搭建要求如图所示: - - - -![image-20240829165616356](../../../../docs/pic/tools/image-20240829165616356.png) - -## 1.2 约束与限制 - -### 1.2.1 支持应用运行的芯片和开发板 - - 本示例支持开发板:3061M - -### 1.2.2 支持API版本、SDK版本 - - 本示例支持版本号:SolarA2_1.0.1.2 - -### 1.2.3 支持IDE版本 - - 本示例支持IDE版本号:1.0.0.6; - -## 1.3 效果预览 - - 当用户烧录编译后的示例代码后,初始化和配置完成后,示例代码中在按键没有按下时Debug串口会一直打印等待按键的log信息,当连接的按键按下时功能正常时Debug串口打印成功log信息;功能异常时按下按键时Debug串口还是会一直打印等待按键的log信息。 - -![image-20240829172606786](../../../../docs/pic/sample_gpio_key/image-20240829172606786.png) - -## 1.4 接口介绍 - -#### 1.4.1 HAL_GPIO_Init() - -| **定义:** | void HAL_GPIO_Init(GPIO_Handle *handle); | -| ------------ | ----------------------------------------- | -| **功能:** | 初始化GPIO寄存器值 | -| **参数:** | handle:GPIO_Handle的值 | -| **返回值:** | None | -| **依赖:** | drivers\gpio\common\inc\gpio.h | - -## 1.5 具体实现 - - 步骤一:GPIO管脚选择:示例代码中选择GPIO管脚用于通过中断方式进行按键检测。也可以选择其他GPIO管脚用于按键检测功能测试,在"GPIO_Init()"接口中的"g_gpiox.baseAddress"可以配置其它GPIOX,g_gpiox.pins可以配置“GPIO_PIN_0-GPIO_PIN_7”中的任意一个。 - - 步骤二:GPIO管脚初始化:调用接口"HAL_GPIO_Init()”完成对示例代码中GPIO管脚的方向、电平、中断模式配置。 - -## 1.6 实验流程 - -- 步骤一:在xxx\vendor\yibaina_3061M\demo\sample_gpio_key/文件夹里面内容复制替换到xxx/user/目录下。 - - ![image-20240829174750105](../../../../docs/pic/sample_gpio_key/image-20240829174750105.png) - - -- 步骤二:点击编译按钮![image-20240528173107958](../../../../docs/pic/sample_gpio_key/image-20240528173107958-17249242848691.png),编译成功后终端窗口输出如下图所示。 - ![image-20240624165330284](../../../../docs/pic/tools/image-20240624165330284.png) - - - -- 步骤三:进入工程配置界面。打开要烧录的工程后,单击顶部![image-20240624154427635](../../../../docs/pic/sample_gpio_key/image-20240624154427635-17249243742892.png)的图标,进入工程配置界面->进入程序加载。选择传输方式为“swd”,并配置其他参数。(具体[参考tools目录README搭建环境](https://gitee.com/HiSpark/open_mcu/tree/master/tools)) - - ![image-20240829174913995](../../../../docs/pic/sample_gpio_key/image-20240829174913995.png) - -- 步骤四:单击“烧录”![image-20240624162016190](../../../../docs/pic/tools/image-20240624162016190.png) 按钮,开始烧录。烧录成功后终端窗口输出如下图所示。 - - ![image-20240624162037834](../../../../docs/pic/sample_gpio_key/image-20240624162037834-17249245112874.png) - -* 步骤五 : 当用户烧录编译后的示例代码后,初始化和配置完成后,示例代码中在按键没有按下时Debug串口会一直打印等待按键的log信息,当连接的按键按下时功能正常时Debug串口打印成功log信息;功能异常时按下按键时Debug串口还是会一直打印等待按键的log信息。 - - ![image-20240829172606786](../../../../docs/pic/sample_gpio_key/image-20240829172606786.png) - - - - \ No newline at end of file diff --git a/vendor/yibaina_3061M/oled_sample/user/generatecode/feature.h b/vendor/yibaina_3061M/oled_sample/user/generatecode/feature.h new file mode 100644 index 00000000..aaceedee --- /dev/null +++ b/vendor/yibaina_3061M/oled_sample/user/generatecode/feature.h @@ -0,0 +1,120 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-25 17:06:08 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define CHIP_3061MNPICA MACRO_ENABLE + +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +#define MCS_PARAM_CHECK MACRO_ENABLE +#define APT_PARAM_CHECK MACRO_ENABLE +#define ADC_PARAM_CHECK MACRO_ENABLE +#define CAPM_PARAM_CHECK MACRO_ENABLE +#define CRG_PARAM_CHECK MACRO_ENABLE +#define I2C_PARAM_CHECK MACRO_ENABLE +#define UART_PARAM_CHECK MACRO_ENABLE +#define SPI_PARAM_CHECK MACRO_ENABLE +#define TIMER_PARAM_CHECK MACRO_ENABLE +#define IWDG_PARAM_CHECK MACRO_ENABLE +#define WWDG_PARAM_CHECK MACRO_ENABLE +#define GPIO_PARAM_CHECK MACRO_ENABLE +#define GPT_PARAM_CHECK MACRO_ENABLE +#define DMA_PARAM_CHECK MACRO_ENABLE +#define CRC_PARAM_CHECK MACRO_ENABLE +#define CFD_PARAM_CHECK MACRO_ENABLE +#define CMM_PARAM_CHECK MACRO_ENABLE +#define CAN_PARAM_CHECK MACRO_ENABLE +#define FLASH_PARAM_CHECK MACRO_ENABLE +#define PMC_PARAM_CHECK MACRO_ENABLE +#define ACMP_PARAM_CHECK MACRO_ENABLE +#define DAC_PARAM_CHECK MACRO_ENABLE +#define PGA_PARAM_CHECK MACRO_ENABLE +#define IOCMG_PARAM_CHECK MACRO_ENABLE +#define QDM_PARAM_CHECK MACRO_ENABLE + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 30000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_UART_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/demo/sample_gpio_key/generatecode/main.h b/vendor/yibaina_3061M/oled_sample/user/generatecode/main.h similarity index 94% rename from vendor/yibaina_3061M/demo/sample_gpio_key/generatecode/main.h rename to vendor/yibaina_3061M/oled_sample/user/generatecode/main.h index c77e0f2e..2ffce61d 100644 --- a/vendor/yibaina_3061M/demo/sample_gpio_key/generatecode/main.h +++ b/vendor/yibaina_3061M/oled_sample/user/generatecode/main.h @@ -18,6 +18,7 @@ * @file main.h * @author MCU Driver Team * @brief This file contains driver init functions. + * @date 2025-04-25 17:06:08 */ /* Define to prevent recursive inclusion ------------------------------------- */ @@ -26,9 +27,12 @@ #include "uart.h" #include "uart_ex.h" -#include "gpio.h" +#include "i2c.h" +#include "i2c_ex.h" #include "crg.h" #include "iocmg.h" +#include "dma.h" +#include "dma_ex.h" #define IO_SPEED_FAST 0x00U #define IO_SPEED_SLOW 0x01U @@ -44,14 +48,11 @@ #define XTAL_DRV_LEVEL1 0x00U extern UART_Handle g_uart0; - -extern GPIO_Handle g_gpio2; - +extern I2C_Handle g_i2c0; +extern DMA_Handle g_dmac; BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect); void SystemInit(void); -void GPIO_CallBackFunc(void *param); - /* USER CODE BEGIN 0 */ /* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ /* USER CODE END 0 */ diff --git a/vendor/yibaina_3061M/oled_sample/user/generatecode/system_init.c b/vendor/yibaina_3061M/oled_sample/user/generatecode/system_init.c new file mode 100644 index 00000000..746fc99e --- /dev/null +++ b/vendor/yibaina_3061M/oled_sample/user/generatecode/system_init.c @@ -0,0 +1,215 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file system_init.c + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-25 17:06:08 + */ + +#include "main.h" +#include "ioconfig.h" +#include "iocmg_ip.h" + + +#define UART0_BAUD_RATE 115200 + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) +{ + CRG_Handle crg; + crg.baseAddress = CRG; + crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC; + crg.pllPreDiv = CRG_PLL_PREDIV_4; + crg.pllFbDiv = 48; /* PLL Multiplier 48 */ + crg.pllPostDiv = CRG_PLL_POSTDIV_2; + crg.coreClkSelect = CRG_CORE_CLK_SELECT_PLL; + crg.handleEx.pllPostDiv2 = CRG_PLL_POSTDIV2_3; + crg.handleEx.clk1MSelect = CRG_1M_CLK_SELECT_HOSC; + crg.handleEx.clk1MDiv = (25 - 1); /* The 1 MHz freq is equal to the input clock frequency / (clk_1m_div + 1). 25 is the div of the clk_1m in CLOCK. */ + + if (HAL_CRG_Init(&crg) != BASE_STATUS_OK) { + return BASE_STATUS_ERROR; + } + *coreClkSelect = crg.coreClkSelect; + return BASE_STATUS_OK; +} + + +__weak void I2C0TxCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN I2C0TxCallback */ + /* USER CODE END I2C0TxCallback */ +} + +__weak void I2C0RxCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN I2C0RxCallback */ + /* USER CODE END I2C0RxCallback */ +} + +__weak void I2C0ErrorCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN I2C0ErrorCallback */ + /* USER CODE END I2C0ErrorCallback */ +} + +static void I2C0_Init(void) +{ + HAL_CRG_IpEnableSet(I2C0_BASE, IP_CLK_ENABLE); /* I2C0 clock enable. */ + g_i2c0.baseAddress = I2C0; + + g_i2c0.functionMode = I2C_MODE_SELECT_MASTER_ONLY; + g_i2c0.addrMode = I2C_7_BITS; + g_i2c0.sdaHoldTime = 10; /* 10 is sda Hold Time */ + g_i2c0.freq = 400000; /* freqence is 400000 */ + g_i2c0.transferBuff = NULL; + g_i2c0.ignoreAckFlag = BASE_CFG_DISABLE; + g_i2c0.handleEx.spikeFilterTime = 0; + g_i2c0.handleEx.sdaDelayTime = 0; + g_i2c0.timeout = 10000; /* 10000 is time out */ + g_i2c0.state = I2C_STATE_RESET; + g_i2c0.rxWaterMark = 1; /* 1 is Rx Threshold configuration */ + g_i2c0.txWaterMark = 12; /* 12 is Tx Threshold configuration */ + g_i2c0.dmaHandle = &g_dmac; + g_i2c0.txDmaCh = DMA_CHANNEL_ONE; + g_i2c0.rxDmaCh = DMA_CHANNEL_ZERO; + HAL_I2C_Init(&g_i2c0); + HAL_I2C_RegisterCallback(&g_i2c0, I2C_MASTER_TX_COMPLETE_CB_ID, I2C0TxCallback); + HAL_I2C_RegisterCallback(&g_i2c0, I2C_MASTER_RX_COMPLETE_CB_ID, I2C0RxCallback); + HAL_I2C_RegisterCallback(&g_i2c0, I2C_ERROR_CB_ID, I2C0ErrorCallback); +} +static void DMA_Channel0Init(void *handle) +{ + DMA_ChannelParam dma_param; + dma_param.direction = DMA_PERIPH_TO_MEMORY_BY_DMAC; + dma_param.srcAddrInc = DMA_ADDR_UNALTERED; + dma_param.destAddrInc = DMA_ADDR_INCREASE; + dma_param.srcPeriph = DMA_REQUEST_I2C0_RX; + dma_param.destPeriph = DMA_REQUEST_MEM; + dma_param.srcWidth = DMA_TRANSWIDTH_BYTE; + dma_param.destWidth = DMA_TRANSWIDTH_BYTE; + dma_param.srcBurst = DMA_BURST_LENGTH_1; + dma_param.destBurst = DMA_BURST_LENGTH_1; + dma_param.pHandle = handle; + HAL_DMA_InitChannel(&g_dmac, &dma_param, DMA_CHANNEL_ZERO); +} +static void DMA_Channel1Init(void *handle) +{ + DMA_ChannelParam dma_param; + dma_param.direction = DMA_MEMORY_TO_PERIPH_BY_DMAC; + dma_param.srcAddrInc = DMA_ADDR_INCREASE; + dma_param.destAddrInc = DMA_ADDR_UNALTERED; + dma_param.srcPeriph = DMA_REQUEST_MEM; + dma_param.destPeriph = DMA_REQUEST_I2C0_TX; + dma_param.srcWidth = DMA_TRANSWIDTH_WORD; + dma_param.destWidth = DMA_TRANSWIDTH_WORD; + dma_param.srcBurst = DMA_BURST_LENGTH_1; + dma_param.destBurst = DMA_BURST_LENGTH_1; + dma_param.pHandle = handle; + HAL_DMA_InitChannel(&g_dmac, &dma_param, DMA_CHANNEL_ONE); +} + +static void DMA_Init(void) +{ + HAL_CRG_IpEnableSet(DMA_BASE, IP_CLK_ENABLE); + g_dmac.baseAddress = DMA; + IRQ_Register(IRQ_DMA_TC, HAL_DMA_IrqHandlerTc, &g_dmac); + IRQ_Register(IRQ_DMA_ERR, HAL_DMA_IrqHandlerError, &g_dmac); + IRQ_EnableN(IRQ_DMA_TC); + IRQ_EnableN(IRQ_DMA_ERR); + HAL_DMA_Init(&g_dmac); + + DMA_Channel0Init((void *)(&g_i2c0)); + HAL_DMA_SetChannelPriorityEx(&g_dmac, DMA_CHANNEL_ZERO, DMA_PRIORITY_HIGHEST); + DMA_Channel1Init((void *)(&g_i2c0)); + HAL_DMA_SetChannelPriorityEx(&g_dmac, DMA_CHANNEL_ONE, DMA_PRIORITY_HIGHEST); +} +static void UART0_Init(void) +{ + HAL_CRG_IpEnableSet(UART0_BASE, IP_CLK_ENABLE); /* UART0 clock enable. */ + g_uart0.baseAddress = UART0; + + g_uart0.baudRate = UART0_BAUD_RATE; + g_uart0.dataLength = UART_DATALENGTH_8BIT; + g_uart0.stopBits = UART_STOPBITS_ONE; + g_uart0.parity = UART_PARITY_NONE; + g_uart0.txMode = UART_MODE_BLOCKING; + g_uart0.rxMode = UART_MODE_BLOCKING; + g_uart0.fifoMode = BASE_CFG_ENABLE; + g_uart0.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart0.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart0.hwFlowCtr = BASE_CFG_DISABLE; + g_uart0.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart0.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart0); +} + + + +static void IOConfig(void) +{ + /* Config PIN36 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_0_AS_JTAG_TCK); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_0_AS_JTAG_TCK, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_0_AS_JTAG_TCK, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_0_AS_JTAG_TCK, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_0_AS_JTAG_TCK, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN37 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_1_AS_JTAG_TMS); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_1_AS_JTAG_TMS, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_1_AS_JTAG_TMS, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_1_AS_JTAG_TMS, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_1_AS_JTAG_TMS, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN15 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_5_AS_I2C0_SCL); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_5_AS_I2C0_SCL, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_5_AS_I2C0_SCL, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_5_AS_I2C0_SCL, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_5_AS_I2C0_SCL, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN16 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_3_AS_I2C0_SDA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_3_AS_I2C0_SDA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_3_AS_I2C0_SDA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_3_AS_I2C0_SDA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_3_AS_I2C0_SDA, DRIVER_RATE_2); /* Output signal edge fast/slow */ +} + +void SystemInit(void) +{ + IOConfig(); + UART0_Init(); + DMA_Init(); + I2C0_Init(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/demo/sample_gpio_key/gpio_key_sample.c b/vendor/yibaina_3061M/oled_sample/user/main.c similarity index 57% rename from vendor/yibaina_3061M/demo/sample_gpio_key/gpio_key_sample.c rename to vendor/yibaina_3061M/oled_sample/user/main.c index 83fc35d9..81f76aab 100644 --- a/vendor/yibaina_3061M/demo/sample_gpio_key/gpio_key_sample.c +++ b/vendor/yibaina_3061M/oled_sample/user/main.c @@ -1,65 +1,79 @@ -/** - * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the - * following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the - * following disclaimer in the documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * @file gpio_key_sample.c - * @author MCU Driver Team - * @brief GPIO module realize a key function sample - * @details GPIO Capturing Key Triggered Interrupt Service Function. If the hardware environment does \ - * not support this function, you need to set up an environment for verification. - */ - -/* Includes ------------------------------------------------------------------*/ -#include "debug.h" -#include "gpio.h" -#include "main.h" -#include "gpio_key_sample.h" - -#define PREVENT_SWIPE_SCREEN_TIME 50 -#define CYCLE_INTERVAL_TIME 500 - -/* prototype functions -------------------------------------------------------*/ -void GPIO_CallBackFunc(void *param); - -/* ---------------------------------- Sample Parameters ---------------------- */ -/** - * @brief GPIO key test sample. - * @param None - * @retval Value of @ref BASE_StatusType. - */ -BASE_StatusType GPIO_KeySample(void) -{ - SystemInit(); - /* Waiting for the key to come. */ - while (1) { - DBG_PRINTF("Wait key \r\n"); - BASE_FUNC_DELAY_MS(CYCLE_INTERVAL_TIME); - } - - return BASE_STATUS_OK; -} - -/** - * @brief GPIO register interrupt callback function. - * @param param Value of @ref GPIO_Handle. - * @retval None - */ -void GPIO_CallBackFunc(void *param) -{ - BASE_FUNC_UNUSED(param); - DBG_PRINTF("in GPIO Key Handler \r\n"); - BASE_FUNC_DELAY_MS(PREVENT_SWIPE_SCREEN_TIME); -} \ No newline at end of file +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + * @date 2025-04-25 17:06:08 + */ + +#include "typedefs.h" +#include "feature.h" +#include "main.h" +#include "oled.h" +#include "debug.h" + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ +/* USER CODE END 0 */ +UART_Handle g_uart0; +I2C_Handle g_i2c0; +DMA_Handle g_dmac; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ +/* USER CODE END 1 */ + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + /* USER CODE END 2 */ + SystemInit(); + /* USER CODE BEGIN 3 */ + + // oled初始化 + OLED_Init(); + // OLED_ShowString(5, 3, "hello Hispark!", 16); + + + + + + OLED_displaystr(0,0,"档位:1"); + OLED_displaystr(0,3,"电机速度:12RPM"); + + + + + /* 建议用户放置初始配置代码 */ + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + /* 建议用户放置周期性执行代码 */ + + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/oled_sample/user/oled/inc/oled.h b/vendor/yibaina_3061M/oled_sample/user/oled/inc/oled.h new file mode 100644 index 00000000..3939b73a --- /dev/null +++ b/vendor/yibaina_3061M/oled_sample/user/oled/inc/oled.h @@ -0,0 +1,46 @@ +#ifndef __OLED__H__ +#define __OLED__H__ + +#define OLED_CMD 0 //写命令 +#define OLED_DATA 1 //写数据 + +#define OLED_MODE 0 +#define SIZE 8 +#define XLevelL 0x00 +#define XLevelH 0x10 +#define Max_Column 128 +#define Max_Row 64 +#define Brightness 0xFF +#define X_WIDTH 128 +#define Y_WIDTH 64 + +BASE_StatusType I2C_Read(unsigned char addr, unsigned char *buffer, unsigned int length); +BASE_StatusType I2C_Write(unsigned char addr, unsigned char data, unsigned int length); + +void OLED_Init(void); + +void OLED_WriteCommand(unsigned char IIC_Command); +void OLED_WriteData(unsigned char IIC_Data); + +void OLED_Write_DataOrCommand(unsigned dat,unsigned cmd); +void OLED_Clear(void); + +void OLED_Display_On(void); + +void OLED_Set_Pos(unsigned char x, unsigned char y); + +void OLED_ShowChar(unsigned char x,unsigned char y,unsigned char chr,unsigned char Char_Size); +void OLED_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len,unsigned char size); +void OLED_ShowString(unsigned char x,unsigned char y,char *chr,unsigned char Char_Size); + +//显示汉字 +void OLED_displaychina(unsigned char x,unsigned char y,unsigned char *ch); + +void OLED_displaystr(unsigned char col,unsigned char page,unsigned char *str); + +unsigned int oled_pow(unsigned char m,unsigned char n); + + +void OLED_displaychar(unsigned char col,unsigned char page,unsigned char eng); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/oled_sample/user/oled/inc/oled_fonts.h b/vendor/yibaina_3061M/oled_sample/user/oled/inc/oled_fonts.h new file mode 100644 index 00000000..2329281a --- /dev/null +++ b/vendor/yibaina_3061M/oled_sample/user/oled/inc/oled_fonts.h @@ -0,0 +1,562 @@ + + + + +//常用ASCII表 +//偏移量32 +//ASCII字符集 +//偏移量32 + +/************************************6*8的点阵************************************/ +const unsigned char F6x8[][6] = { +{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// sp +{0x00, 0x00, 0x00, 0x2f, 0x00, 0x00},// ! +{0x00, 0x00, 0x07, 0x00, 0x07, 0x00},// " +{0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14},// # +{0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12},// $ +{0x00, 0x62, 0x64, 0x08, 0x13, 0x23},// % +{0x00, 0x36, 0x49, 0x55, 0x22, 0x50},// & +{0x00, 0x00, 0x05, 0x03, 0x00, 0x00},// ' +{0x00, 0x00, 0x1c, 0x22, 0x41, 0x00},// ( +{0x00, 0x00, 0x41, 0x22, 0x1c, 0x00},// ) +{0x00, 0x14, 0x08, 0x3E, 0x08, 0x14},// * +{0x00, 0x08, 0x08, 0x3E, 0x08, 0x08},// + +{0x00, 0x00, 0x00, 0xA0, 0x60, 0x00},// , +{0x00, 0x08, 0x08, 0x08, 0x08, 0x08},// - +{0x00, 0x00, 0x60, 0x60, 0x00, 0x00},// . +{0x00, 0x20, 0x10, 0x08, 0x04, 0x02},// / +{0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E},// 0 +{0x00, 0x00, 0x42, 0x7F, 0x40, 0x00},// 1 +{0x00, 0x42, 0x61, 0x51, 0x49, 0x46},// 2 +{0x00, 0x21, 0x41, 0x45, 0x4B, 0x31},// 3 +{0x00, 0x18, 0x14, 0x12, 0x7F, 0x10},// 4 +{0x00, 0x27, 0x45, 0x45, 0x45, 0x39},// 5 +{0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30},// 6 +{0x00, 0x01, 0x71, 0x09, 0x05, 0x03},// 7 +{0x00, 0x36, 0x49, 0x49, 0x49, 0x36},// 8 +{0x00, 0x06, 0x49, 0x49, 0x29, 0x1E},// 9 +{0x00, 0x00, 0x36, 0x36, 0x00, 0x00},// : +{0x00, 0x00, 0x56, 0x36, 0x00, 0x00},// ; +{0x00, 0x08, 0x14, 0x22, 0x41, 0x00},// < +{0x00, 0x14, 0x14, 0x14, 0x14, 0x14},// = +{0x00, 0x00, 0x41, 0x22, 0x14, 0x08},// > +{0x00, 0x02, 0x01, 0x51, 0x09, 0x06},// ? +{0x00, 0x32, 0x49, 0x59, 0x51, 0x3E},// @ +{0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C},// A +{0x00, 0x7F, 0x49, 0x49, 0x49, 0x36},// B +{0x00, 0x3E, 0x41, 0x41, 0x41, 0x22},// C +{0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C},// D +{0x00, 0x7F, 0x49, 0x49, 0x49, 0x41},// E +{0x00, 0x7F, 0x09, 0x09, 0x09, 0x01},// F +{0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A},// G +{0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F},// H +{0x00, 0x00, 0x41, 0x7F, 0x41, 0x00},// I +{0x00, 0x20, 0x40, 0x41, 0x3F, 0x01},// J +{0x00, 0x7F, 0x08, 0x14, 0x22, 0x41},// K +{0x00, 0x7F, 0x40, 0x40, 0x40, 0x40},// L +{0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F},// M +{0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F},// N +{0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E},// O +{0x00, 0x7F, 0x09, 0x09, 0x09, 0x06},// P +{0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E},// Q +{0x00, 0x7F, 0x09, 0x19, 0x29, 0x46},// R +{0x00, 0x46, 0x49, 0x49, 0x49, 0x31},// S +{0x00, 0x01, 0x01, 0x7F, 0x01, 0x01},// T +{0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F},// U +{0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F},// V +{0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F},// W +{0x00, 0x63, 0x14, 0x08, 0x14, 0x63},// X +{0x00, 0x07, 0x08, 0x70, 0x08, 0x07},// Y +{0x00, 0x61, 0x51, 0x49, 0x45, 0x43},// Z +{0x00, 0x00, 0x7F, 0x41, 0x41, 0x00},// [ +{0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55},// 55 +{0x00, 0x00, 0x41, 0x41, 0x7F, 0x00},// ] +{0x00, 0x04, 0x02, 0x01, 0x02, 0x04},// ^ +{0x00, 0x40, 0x40, 0x40, 0x40, 0x40},// _ +{0x00, 0x00, 0x01, 0x02, 0x04, 0x00},// ' +{0x00, 0x20, 0x54, 0x54, 0x54, 0x78},// a +{0x00, 0x7F, 0x48, 0x44, 0x44, 0x38},// b +{0x00, 0x38, 0x44, 0x44, 0x44, 0x20},// c +{0x00, 0x38, 0x44, 0x44, 0x48, 0x7F},// d +{0x00, 0x38, 0x54, 0x54, 0x54, 0x18},// e +{0x00, 0x08, 0x7E, 0x09, 0x01, 0x02},// f +{0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C},// g +{0x00, 0x7F, 0x08, 0x04, 0x04, 0x78},// h +{0x00, 0x00, 0x44, 0x7D, 0x40, 0x00},// i +{0x00, 0x40, 0x80, 0x84, 0x7D, 0x00},// j +{0x00, 0x7F, 0x10, 0x28, 0x44, 0x00},// k +{0x00, 0x00, 0x41, 0x7F, 0x40, 0x00},// l +{0x00, 0x7C, 0x04, 0x18, 0x04, 0x78},// m +{0x00, 0x7C, 0x08, 0x04, 0x04, 0x78},// n +{0x00, 0x38, 0x44, 0x44, 0x44, 0x38},// o +{0x00, 0xFC, 0x24, 0x24, 0x24, 0x18},// p +{0x00, 0x18, 0x24, 0x24, 0x18, 0xFC},// q +{0x00, 0x7C, 0x08, 0x04, 0x04, 0x08},// r +{0x00, 0x48, 0x54, 0x54, 0x54, 0x20},// s +{0x00, 0x04, 0x3F, 0x44, 0x40, 0x20},// t +{0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C},// u +{0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C},// v +{0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C},// w +{0x00, 0x44, 0x28, 0x10, 0x28, 0x44},// x +{0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C},// y +{0x00, 0x44, 0x64, 0x54, 0x4C, 0x44},// z +{0x14, 0x14, 0x14, 0x14, 0x14, 0x14},// horiz lines +}; + +/****************************************8*16的点阵************************************/ +const unsigned char F8X16[]={ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 + 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1 + 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2 + 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3 + 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4 + 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5 + 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6 + 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7 + 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8 + 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9 + 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10 + 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14 + 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15 + 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16 + 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17 + 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18 + 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19 + 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20 + 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21 + 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22 + 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23 + 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24 + 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25 + 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26 + 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27 + 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28 + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29 + 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30 + 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31 + 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32 + 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33 + 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34 + 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35 + 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36 + 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37 + 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38 + 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39 + 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40 + 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41 + 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42 + 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43 + 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44 + 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45 + 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46 + 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47 + 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48 + 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49 + 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50 + 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51 + 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52 + 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53 + 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54 + 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55 + 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56 + 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57 + 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58 + 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59 + 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60 + 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61 + 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63 + 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65 + 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66 + 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67 + 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69 + 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70 + 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71 + 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72 + 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73 + 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74 + 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75 + 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76 + 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77 + 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79 + 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80 + 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81 + 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82 + 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83 + 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84 + 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85 + 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86 + 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87 + 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88 + 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89 + 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90 + 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91 + 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92 + 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93 + 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 +}; + + +unsigned char Aciss_8X16[]={ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,/*"!",1*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x10,0x0C,0x02,0x10,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*""",2*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x40,0xC0,0x78,0x40,0xC0,0x78,0x00,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x00,/*"#",3*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x70,0x88,0x88,0xFC,0x08,0x30,0x00,0x00,0x18,0x20,0x20,0xFF,0x21,0x1E,0x00,/*"$",4*/ +/* (8 X 16 , 宋体 )*/ + +0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00,0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00,/*"%",5*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x2C,0x19,0x27,0x21,0x10,/*"&",6*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x12,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",7*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,/*"(",8*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,/*")",9*/ +/* (8 X 16 , 宋体 )*/ + +0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,/*"*",10*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01,/*"+",11*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x70,0x00,0x00,0x00,0x00,0x00,/*",",12*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/*"-",13*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*".",14*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0xC0,0x38,0x04,0x00,0x00,0x60,0x18,0x07,0x00,0x00,0x00,0x00,/*"/",15*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",16*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*"1",17*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",18*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,/*"3",19*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,/*"4",20*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,/*"5",21*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*"6",22*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,/*"7",23*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",24*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,/*"9",25*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,/*":",26*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,/*";",27*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,/*"<",28*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,/*"=",29*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,/*">",30*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x70,0x48,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x30,0x37,0x00,0x00,0x00,/*"?",31*/ +/* (8 X 16 , 宋体 )*/ + +0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x28,0x2F,0x28,0x17,0x00,/*"@",32*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,/*"A",33*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,/*"B",34*/ +/* (8 X 16 , 宋体 )*/ + +0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,/*"C",35*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",36*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,/*"E",37*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,/*"F",38*/ +/* (8 X 16 , 宋体 )*/ + +0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,/*"G",39*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,/*"H",40*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"I",41*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,/*"J",42*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,/*"K",43*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,/*"L",44*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x01,0x3E,0x01,0x3F,0x20,0x00,/*"M",45*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,/*"N",46*/ +/* (8 X 16 , 宋体 )*/ + +0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,/*"O",47*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,/*"P",48*/ +/* (8 X 16 , 宋体 )*/ + +0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x28,0x28,0x30,0x50,0x4F,0x00,/*"Q",49*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,/*"R",50*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,/*"X",51*/ +/* (8 X 16 , 宋体 )*/ + +0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,/*"T",52*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"U",53*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,/*"V",54*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00,/*"W",55*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,/*"X",56*/ +/* (8 X 16 , 宋体 )*/ + +0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,/*"Y",57*/ +/* (8 X 16 , 宋体 )*/ + +0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,/*"Z",58*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,/*"[",59*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x04,0x38,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,/*"\",60*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,/*"]",61*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x04,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",62*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,/*"_",63*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"`",64*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x19,0x24,0x24,0x12,0x3F,0x20,0x00,/*"a",65*/ +/* (8 X 16 , 宋体 )*/ + +0x10,0xF0,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"b",66*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,/*"c",67*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x90,0xF0,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"d",68*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x24,0x24,0x24,0x24,0x17,0x00,/*"e",69*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x80,0x80,0xE0,0x90,0x90,0x20,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"f",70*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,/*"g",71*/ +/* (8 X 16 , 宋体 )*/ + +0x10,0xF0,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"h",72*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"i",73*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,/*"j",74*/ +/* (8 X 16 , 宋体 )*/ + +0x10,0xF0,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x06,0x29,0x30,0x20,0x00,/*"k",75*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"l",76*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,/*"m",77*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"n",78*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"o",79*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0x91,0x20,0x20,0x11,0x0E,0x00,/*"p",80*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0x91,0xFF,0x80,/*"q",81*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,/*"r",82*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,/*"s",83*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x10,0x00,/*"t",84*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"u",85*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x03,0x0C,0x30,0x0C,0x03,0x00,0x00,/*"v",86*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x01,0x0E,0x30,0x0C,0x07,0x38,0x06,0x01,/*"w",87*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x80,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x20,0x31,0x0E,0x2E,0x31,0x20,0x00,/*"x",88*/ +/* (8 X 16 , 宋体 )*/ + +0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x81,0x86,0x78,0x18,0x06,0x01,0x00,/*"y",89*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,/*"z",90*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0x00,0xFC,0x02,0x02,0x00,0x00,0x00,0x00,0x01,0x3E,0x40,0x40,/*"{",91*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,/*"|",92*/ +/* (8 X 16 , 宋体 )*/ + +0x02,0x02,0xFC,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x3E,0x01,0x00,0x00,0x00,0x00,/*"}",93*/ +/* (8 X 16 , 宋体 )*/ + +0x00,0x02,0x01,0x02,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",94*/ +/* (8 X 16 , 宋体 )*/ + +}; +//确定汉字字模数据位置 +const unsigned char indexs[][2]={"基","于","海","思","单","片","机","智","能","中","专","速","度","一", +"二","三","四","五","档","位","电"}; + + +const unsigned char Hzk[][32]={ +{0x00,0x04,0x04,0x04,0xFF,0x54,0x54,0x54,0x54,0x54,0xFF,0x04,0x04,0x04,0x00,0x00}, +{0x11,0x11,0x89,0x85,0x93,0x91,0x91,0xFD,0x91,0x91,0x93,0x85,0x89,0x11,0x11,0x00},/*"基",0*/ +{0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00}, +{0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"于",1*/ +{0x10,0x60,0x02,0x0C,0xC0,0x10,0x08,0xF7,0x14,0x54,0x94,0x14,0xF4,0x04,0x00,0x00}, +{0x04,0x04,0x7C,0x03,0x00,0x01,0x1D,0x13,0x11,0x55,0x99,0x51,0x3F,0x11,0x01,0x00},/*"海",2*/ +{0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00}, +{0x40,0x38,0x01,0x00,0x3C,0x40,0x40,0x42,0x4C,0x40,0x40,0x70,0x05,0x08,0x30,0x00},/*"思",3*/ +{0x00,0x00,0xF8,0x49,0x4A,0x4C,0x48,0xF8,0x48,0x4C,0x4A,0x49,0xF8,0x00,0x00,0x00}, +{0x10,0x10,0x13,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x13,0x10,0x10,0x00},/*"单",4*/ +{0x00,0x00,0x00,0xFE,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x00,0x00}, +{0x00,0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x00},/*"片",5*/ +{0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00}, +{0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00},/*"机",6*/ +{0x10,0x94,0x53,0x32,0x1E,0x32,0x52,0x10,0x00,0x7E,0x42,0x42,0x42,0x7E,0x00,0x00}, +{0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00},/*"智",7*/ +{0x08,0xCC,0x4A,0x49,0x48,0x4A,0xCC,0x18,0x00,0x7F,0x88,0x88,0x84,0x82,0xE0,0x00}, +{0x00,0xFF,0x12,0x12,0x52,0x92,0x7F,0x00,0x00,0x7E,0x88,0x88,0x84,0x82,0xE0,0x00},/*"能",8*/ +{0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00}, +{0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00},/*"中",9*/ +{0x40,0x40,0x48,0x48,0x48,0xC8,0x78,0x4F,0x48,0x48,0x48,0x48,0x48,0x40,0x40,0x00}, +{0x00,0x00,0x00,0x00,0x03,0x12,0x12,0x22,0x22,0x52,0x8A,0x06,0x00,0x00,0x00,0x00},/*"专",10*/ + +{0x40,0x40,0x42,0xCC,0x00,0x04,0xF4,0x94,0x94,0xFF,0x94,0x94,0xF4,0x04,0x00,0x00}, +{0x00,0x40,0x20,0x1F,0x20,0x48,0x44,0x42,0x41,0x5F,0x41,0x42,0x44,0x48,0x40,0x00},/*"速",11*/ +{0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00}, +{0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00},/*"度",12*/ +{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00}, +{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"一",13*/ +{0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00}, +{0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00},/*"二",14*/ +{0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00}, +{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00},/*"三",15*/ +{0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00}, +{0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00},/*"四",16*/ +{0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00}, +{0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00},/*"五",17*/ +{0x10,0x10,0xD0,0xFF,0x90,0x10,0x40,0x42,0x5C,0x40,0x7F,0x40,0x50,0xCE,0x00,0x00}, +{0x04,0x03,0x00,0xFF,0x00,0x01,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00},/*"档",18*/ +{0x00,0x80,0x60,0xF8,0x07,0x10,0x90,0x10,0x11,0x16,0x10,0x10,0xD0,0x10,0x00,0x00}, +{0x01,0x00,0x00,0xFF,0x40,0x40,0x41,0x5E,0x40,0x40,0x70,0x4E,0x41,0x40,0x40,0x00},/*"位",19*/ +{0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00}, +{0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"电",20*/ + + + + +}; + + + + + + + + + + + + + + + + diff --git a/vendor/yibaina_3061M/oled_sample/user/oled/src/oled.c b/vendor/yibaina_3061M/oled_sample/user/oled/src/oled.c new file mode 100644 index 00000000..355dd0d1 --- /dev/null +++ b/vendor/yibaina_3061M/oled_sample/user/oled/src/oled.c @@ -0,0 +1,352 @@ +#include "main.h" +#include "debug.h" +#include "oled_fonts.h" +#include "oled.h" +#include + +#define OLED_WRITE_REG 0x78 //0x78 ap3216 0x3C +#define OLED_READ_REG OLED_WRITE_REG+1 + +#define I2C_SAMPLE_OLED_PAGE_SIZE 7//一次写一个字节 +#define I2C_SAMPLE_OLED_ADDR_SIZE 1 +#define I2C_SAMPLE_MAX_TIMEOUT 10000 + + + + +/** + * @brief 在阻塞模式下读取数据 + * @param addr 要读取的寄存器地址 + * @param buffer 用于存储读取数据的缓冲区 + * @param length 要读取的数据长度 + * @retval BASE状态类型: OK, ERROR, BUSY, TIMEOUT, NOT SUPPORT + */ +BASE_StatusType I2C_Read(unsigned char addr, unsigned char *buffer, unsigned int length) +{ + BASE_StatusType ret = BASE_STATUS_OK; + + // 存储要读取的寄存器地址 + unsigned char tempAddr[I2C_SAMPLE_OLED_ADDR_SIZE]; + tempAddr[0] = addr; + + // 发送寄存器地址 + ret = HAL_I2C_MasterWriteDMA(&g_i2c0, OLED_WRITE_REG, tempAddr, I2C_SAMPLE_OLED_ADDR_SIZE); + + // 发送寄存器地址是否成功 + if (ret != BASE_STATUS_OK){ + DBG_PRINTF("LINE:%d,Read Data Fail,ret:%d\r\n", __LINE__, ret); + return ret; + } + + /* 从设备读取数据 */ + ret = HAL_I2C_MasterReadDMA(&g_i2c0, OLED_READ_REG, buffer, length); + + // 从寄存器地址读取数据是否成功 + if (ret != BASE_STATUS_OK){ + DBG_PRINTF("LINE:%d,Read Data Fail,ret:%d\r\n", __LINE__, ret); + return ret; + } + return ret; +} + +/** + * @brief 在阻塞模式下写入数据 + * @param addr 寄存器地址 + * @param data 要写入的数据 + * @param length 数据长度 + * @retval BASE状态类型: OK, ERROR, BUSY, TIMEOUT, NOT SUPPORT + */ +BASE_StatusType I2C_Write(unsigned char addr, unsigned char data, unsigned int length) +{ + BASE_StatusType ret = BASE_STATUS_OK; + + // 使用两个字节的数组,存储写寄存器地址和发送数据 + unsigned char tempWrite[I2C_SAMPLE_OLED_PAGE_SIZE + I2C_SAMPLE_OLED_ADDR_SIZE]; + tempWrite[0] = addr; // 要写入的寄存器地址 + tempWrite[1] = data; // 要写入的数据 + + // 写入的寄存器地址长度+写入的数据长度(2字节) + ret = HAL_I2C_MasterWriteDMA(&g_i2c0, OLED_WRITE_REG, tempWrite, I2C_SAMPLE_OLED_ADDR_SIZE + length); + + if (ret != BASE_STATUS_OK){ + DBG_PRINTF("LINE:%d,Write Data Fail!,ret:%d\r\n", __LINE__, ret); + } + return ret; +} + +// OLED屏幕初始化 +void OLED_Init(void) +{ + BASE_FUNC_DELAY_MS(100); + I2C_Write(0x00, 0xAE, 1); // 关闭显示 + I2C_Write(0x00, 0x00, 1); // 设置低列地址 + I2C_Write(0x00, 0x10, 1); // 设置高列地址 + I2C_Write(0x00, 0x40, 1); // 设置起始行地址 + I2C_Write(0x00, 0xB0, 1); // 设置页面寻址模式的起始页地址,0-7 + I2C_Write(0x00, 0x81, 1); // 设置对比度控制寄存器 + I2C_Write(0x00, 0xFF, 1); // 对比度调节 0x00~0xff + I2C_Write(0x00, 0xA1, 1); // 设置段重映射 0 到 127 + I2C_Write(0x00, 0xA6, 1); // 设置正常显示 + I2C_Write(0x00, 0xA8, 1); // 设置多重扫描比率(1 到 64) + I2C_Write(0x00, 0x3F, 1); // 设置多重扫描比率的具体值 + I2C_Write(0x00, 0xC8, 1); // 设置COM输出扫描方向 + I2C_Write(0x00, 0xD3, 1); // 设置显示偏移 + I2C_Write(0x00, 0x00, 1); // 不偏移 + I2C_Write(0x00, 0xD5, 1); // 设置显示时钟分频比/振荡器频率 + I2C_Write(0x00, 0x80, 1); // 设置分频比 + I2C_Write(0x00, 0xD8, 1); // 设置预充电周期 + I2C_Write(0x00, 0x05, 1); // 设置预充电周期的具体值 + I2C_Write(0x00, 0xD9, 1); // 设置预充电周期 + I2C_Write(0x00, 0xF1, 1); // 设置预充电周期的具体值 + I2C_Write(0x00, 0xDA, 1); // 设置COM引脚硬件配置 + I2C_Write(0x00, 0x12, 1); // 设置COM引脚硬件配置的具体值 + I2C_Write(0x00, 0xDB, 1); // 设置VCOMH + I2C_Write(0x00, 0x30, 1); // 设置VCOMH的具体值 0x20, 0.77xVcc + I2C_Write(0x00, 0x8D, 1); // 设置DC-DC使能 + I2C_Write(0x00, 0x14, 1); // 设置DC-DC使能的具体值 + I2C_Write(0x00, 0xAF, 1); // 打开OLED面板 + OLED_Clear(); // 清屏 +} + +// 写命令 +void OLED_WriteCommand(unsigned char dat){ + I2C_Write(0x00,dat,1); +} + +// 写数据 +void OLED_WriteData(unsigned char dat){ + I2C_Write(0x40,dat,1); +} + +// 区别是写数据还是写命令 +void OLED_Write_DataOrCommand(unsigned dat,unsigned cmd) +{ + if(cmd){ + OLED_WriteData(dat); + } + else{ + OLED_WriteCommand(dat); + } +} + +// 清屏 +void OLED_Clear(void) +{ + unsigned char i, n; + for (i = 0; i < 8; i++) + { + OLED_Write_DataOrCommand(0xb0 + i, OLED_CMD); // 设置页地址(0~7) + OLED_Write_DataOrCommand(0x02, OLED_CMD); // 设置显示位置—列低地址 0x00 + OLED_Write_DataOrCommand(0x10, OLED_CMD); // 设置显示位置—列高地址 + for (n = 0; n < 128; n++) + OLED_Write_DataOrCommand(0, OLED_DATA); + } // 更新显示 +} + +// 开启OLED +void OLED_Display_On(void) +{ + OLED_Write_DataOrCommand(0X8D, OLED_CMD); // 设置电荷泵 + OLED_Write_DataOrCommand(0X14, OLED_CMD); // 开启电荷泵 + OLED_Write_DataOrCommand(0XAF, OLED_CMD); // OLED唤醒 +} + +// 设置起始点坐标 +void OLED_Set_Pos(unsigned char x, unsigned char y) +{ + OLED_Write_DataOrCommand(0xb0 + y, OLED_CMD); + OLED_Write_DataOrCommand((((x + 2) & 0xf0) >> 4) | 0x10, OLED_CMD); // 取高位 + OLED_Write_DataOrCommand(((x + 2) & 0x0f), OLED_CMD); // 取低位 +} + +// 显示字符 +void OLED_ShowChar(unsigned char x,unsigned char y,unsigned char chr,unsigned char Char_Size) +{ + unsigned char c = 0, i = 0; + c = chr - ' '; // 得到偏移后的值 + if (x > Max_Column - 1) + { + x = 0; + y = y + 2; + } + if (Char_Size == 16) + { + OLED_Set_Pos(x, y); + for (i = 0; i < 8; i++) + OLED_Write_DataOrCommand(F8X16[c * 16 + i], OLED_DATA); + OLED_Set_Pos(x, y + 1); + for (i = 0; i < 8; i++) + OLED_Write_DataOrCommand(F8X16[c * 16 + i + 8], OLED_DATA); + } + else + { + OLED_Set_Pos(x, y); + for (i = 0; i < 6; i++) + OLED_Write_DataOrCommand(F6x8[c][i], OLED_DATA); + } +} + + + +void OLED_displaychar(unsigned char col,unsigned char page,unsigned char eng) +{ + unsigned char font_res=0; + + font_res=eng-' '; //在ACISS的第几次位 + + for(unsigned char i=0;i<2;i++) + { + //设置显示位置 + OLED_WriteCommand(0x00 + (col & 0x0f));//设置低位列地址 + OLED_WriteCommand(0x10 + ((col & 0xf0)>>4));//设置高位列地址 + OLED_WriteCommand(0xb0+page+i);//设置页地址 + for(unsigned char j=0;j<8;j++) + { + OLED_WriteData(Aciss_8X16[16*font_res+8*i+j]); + } + } +} + + + +//显示2个数字 +//x,y :起点坐标 +//len :数字的位数 +//size:字体大小 +//mode:模式 0,填充模式;1,叠加模式 +//num:数值(0~4294967295); + +void OLED_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len,unsigned char size2) +{ + unsigned char t,temp; + unsigned char enshow = 0; + for (t = 0; t < len; t++) + { + temp = (num / oled_pow(10, len - t - 1)) % 10; // 根据位数来显示数字 + if (enshow == 0 && t < (len - 1)) + { + if (temp == 0) + { + OLED_ShowChar(x + (size2)*t, y, ' ', size2); + continue; + } + else + enshow = 1; + } + OLED_ShowChar(x + (size2)*t, y, temp + '0', size2); // ? + } +} + + +//显示一个字符号串 +void OLED_ShowString(unsigned char x,unsigned char y,char *chr,unsigned char Char_Size) +{ + unsigned char j = 0; + while (chr[j] != '\0') + { + OLED_ShowChar(x, y, chr[j], Char_Size); + x += 8; + if (x > 120) +{ + x = 0; + y += 2; + } + j++; + } +} + + + + + +void OLED_displaychina(unsigned char x,unsigned char y,unsigned char *ch) +{ + int t,adder=0; + unsigned char k; + //确定汉字在小字库的位置 + for(k=0;k< sizeof(indexs) /sizeof(indexs[0]);k++) + { + if(*ch == indexs[k][0] && *(ch+1)==indexs[k][1]) + break; + } + + OLED_Set_Pos(x,y); + for(t=0;t<16;t++) + { + OLED_Write_DataOrCommand(Hzk[2*k][t],OLED_DATA); + adder+=1; + } + OLED_Set_Pos(x,y+1); + for(t=0;t<16;t++) + { + OLED_Write_DataOrCommand(Hzk[2*k+1][t],OLED_DATA); + adder+=1; + } + + +} + +/* +Function name: OLED_displaystr +Description:OLED显字符串 +param: u8 col 列位置 + u8 page 行位置 + u8 *str 字符串 +retval: void +Remarks: + + +*/ + + +void OLED_displaystr(unsigned char col,unsigned char page,unsigned char *str) +{ + while(*str !='\0') + { + if(*str >= 0xA1)//显示汉字 + { + OLED_displaychina(col,page,str); + str+=3; + col+=16; + } + else//显示英文 + { + OLED_displaychar(col,page,*str); + str+=1; + col+=8; + } + + } +} + + + + + +// /***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/ +// void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]) +// { +// unsigned int j=0; +// unsigned char x,y; + +// if(y1%8==0) y=y1/8; +// else y=y1/8+1; +// for(y=y0;ySC_SYS_STAT.BIT.update_mode = 0; + SYSCTRL0->SC_SYS_STAT.BIT.update_mode_clear = 1; + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN1 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_7_AS_ACMP0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_7_AS_ACMP0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_7_AS_ACMP0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_7_AS_ACMP0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_7_AS_ACMP0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN48 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_6_AS_ACMP_N2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_6_AS_ACMP_N2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_6_AS_ACMP_N2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_6_AS_ACMP_N2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_6_AS_ACMP_N2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN47 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_5_AS_ACMP_P2); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_5_AS_ACMP_P2, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_5_AS_ACMP_P2, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_5_AS_ACMP_P2, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_5_AS_ACMP_P2, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN4 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_6_AS_PGA0_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_6_AS_PGA0_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_6_AS_PGA0_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_6_AS_PGA0_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_6_AS_PGA0_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN5 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_5_AS_PGA0_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_5_AS_PGA0_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_5_AS_PGA0_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_5_AS_PGA0_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_5_AS_PGA0_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN3 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_7_AS_PGA0_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_7_AS_PGA0_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_7_AS_PGA0_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_7_AS_PGA0_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_7_AS_PGA0_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN7 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_7_AS_ADC_AIN9); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_7_AS_ADC_AIN9, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_7_AS_ADC_AIN9, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_7_AS_ADC_AIN9, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_7_AS_ADC_AIN9, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN2 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO5_1_AS_ADC_AIN5); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO5_1_AS_ADC_AIN5, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO5_1_AS_ADC_AIN5, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO5_1_AS_ADC_AIN5, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO5_1_AS_ADC_AIN5, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN14 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_7_AS_ADC_AIN15); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_7_AS_ADC_AIN15, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_7_AS_ADC_AIN15, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_7_AS_ADC_AIN15, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_7_AS_ADC_AIN15, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN11 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_5_AS_PGA1_P0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_5_AS_PGA1_P0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_5_AS_PGA1_P0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_5_AS_PGA1_P0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_5_AS_PGA1_P0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN12 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_6_AS_PGA1_N0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_6_AS_PGA1_N0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_6_AS_PGA1_N0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_6_AS_PGA1_N0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_6_AS_PGA1_N0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN13 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_7_AS_PGA1_OUT); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_7_AS_PGA1_OUT, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_7_AS_PGA1_OUT, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_7_AS_PGA1_OUT, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_7_AS_PGA1_OUT, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN35 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_3_AS_GPIO2_3); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_3_AS_GPIO2_3, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_3_AS_GPIO2_3, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_3_AS_GPIO2_3, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_3_AS_GPIO2_3, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN27 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_0_AS_GPIO1_0); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_0_AS_GPIO1_0, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_0_AS_GPIO1_0, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_0_AS_GPIO1_0, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_0_AS_GPIO1_0, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN41 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_4_AS_GPIO2_4); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_4_AS_GPIO2_4, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_4_AS_GPIO2_4, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_4_AS_GPIO2_4, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_4_AS_GPIO2_4, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN31 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_0_AS_QDM1_A); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_0_AS_QDM1_A, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_0_AS_QDM1_A, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_0_AS_QDM1_A, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_0_AS_QDM1_A, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN32 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO2_1_AS_QDM1_B); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO2_1_AS_QDM1_B, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO2_1_AS_QDM1_B, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO2_1_AS_QDM1_B, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO2_1_AS_QDM1_B, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN33 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO5_0_AS_QDM1_INDEX); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO5_0_AS_QDM1_INDEX, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO5_0_AS_QDM1_INDEX, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO5_0_AS_QDM1_INDEX, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO5_0_AS_QDM1_INDEX, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN19 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_0_AS_APT0_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_0_AS_APT0_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_0_AS_APT0_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_0_AS_APT0_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_0_AS_APT0_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN23 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_0_AS_APT0_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_0_AS_APT0_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_0_AS_APT0_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_0_AS_APT0_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_0_AS_APT0_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN20 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_1_AS_APT1_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_1_AS_APT1_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_1_AS_APT1_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_1_AS_APT1_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_1_AS_APT1_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN24 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_1_AS_APT1_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_1_AS_APT1_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_1_AS_APT1_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_1_AS_APT1_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_1_AS_APT1_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN21 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO3_2_AS_APT2_PWMA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO3_2_AS_APT2_PWMA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO3_2_AS_APT2_PWMA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO3_2_AS_APT2_PWMA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO3_2_AS_APT2_PWMA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN25 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_2_AS_APT2_PWMB); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_2_AS_APT2_PWMB, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_2_AS_APT2_PWMB, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_2_AS_APT2_PWMB, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_2_AS_APT2_PWMB, DRIVER_RATE_2); /* Output signal edge fast/slow */ + + + /* Config PIN15 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_5_AS_I2C0_SCL); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_5_AS_I2C0_SCL, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_5_AS_I2C0_SCL, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_5_AS_I2C0_SCL, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_5_AS_I2C0_SCL, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN16 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO4_3_AS_I2C0_SDA); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO4_3_AS_I2C0_SDA, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO4_3_AS_I2C0_SDA, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO4_3_AS_I2C0_SDA, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO4_3_AS_I2C0_SDA, DRIVER_RATE_2); /* Output signal edge fast/slow */ + +} + +static void APT_SyncMasterInit(void) +{ + HAL_APT_MasterSyncInit(&g_apt0, APT_SYNC_OUT_ON_CNTR_ZERO); +} + +static void APT_SyncSlaveInit(void) +{ + APT_SlaveSyncIn aptSlave; + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt1, &aptSlave); + + aptSlave.cntPhase = 0; /* counter phase value */ + aptSlave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + aptSlave.syncInSrc = APT_SYNCIN_SRC_APT0_SYNCOUT; /* sync source selection */ + aptSlave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(&g_apt2, &aptSlave); + +} + +void SystemInit(void) +{ + IOConfig(); + DMA_Init(); + UART0_Init(); + ACMP0_Init(); + APT0_Init(); + APT1_Init(); + APT2_Init(); + ADC0_Init(); + PGA0_Init(); + PGA1_Init(); + TIMER0_Init(); + TIMER1_Init(); + QDM1_Init(); + GPIO_Init(); + I2C0_Init(); + APT_SyncMasterInit(); + APT_SyncSlaveInit(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/main.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/main.c new file mode 100644 index 00000000..b77983aa --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/main.c @@ -0,0 +1,81 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + */ + +#include "typedefs.h" +#include "feature.h" +#include "mcs_motor_process.h" +#include "main.h" +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ + +#include "debug.h" +/* USER CODE END 0 */ +QDM_Handle g_qdm1; +ACMP_Handle g_acmp0; +PGA_Handle g_pga0; +PGA_Handle g_pga1; +TIMER_Handle g_timer0; +TIMER_Handle g_timer1; +TIMER_Handle g_timer2; +UART_Handle g_uart0; +APT_Handle g_apt0; +APT_Handle g_apt1; +APT_Handle g_apt2; +ADC_Handle g_adc0; +DMA_Handle g_dmac; +GPIO_Handle g_gpio2; +GPIO_Handle g_gpio1; +I2C_Handle g_i2c0; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ + + +/* USER CODE END 1 */ + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + /* USER CODE END 2 */ + MotorMainProcess(); + + // SystemInit(); /* 系统初始化 */ + /* USER CODE BEGIN 3 */ + /* 建议用户放置初始配置代码 */ + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + /* 建议用户放置周期性执行代码 */ + + BASE_FUNC_DELAY_MS(100); + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_carrier.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_carrier.h new file mode 100644 index 00000000..e09442d2 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_carrier.h @@ -0,0 +1,153 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration for carrier interrupt processing function. + */ +#ifndef McuMagicTag_MCS_CARRIER_H +#define McuMagicTag_MCS_CARRIER_H + +#include "mcs_status.h" +#include "mcs_mtr_param.h" +#include "mcs_svpwm.h" +#include "mcs_curr_ctrl.h" +#include "mcs_if_ctrl.h" +#include "mcs_ramp_mgmt.h" +#include "mcs_spd_ctrl.h" +#include "mcs_pos_ctrl.h" +#include "mcs_fosmo.h" +#include "mcs_smo_4th.h" +#include "mcs_pll.h" +#include "mcs_startup.h" +#include "mcs_r1_svpwm.h" +#include "mcs_fw_ctrl.h" +#include "mcs_prot_user.h" +#include "mcs_inc_enc.h" + +typedef void (*MCS_ReadCurrUvwCb)(UvwAxis *CurrUvw); +typedef void (*MCS_SetPwmDutyCb)(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight); +typedef void (*MCS_SetADCTriggerTimeCb)(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB); +typedef void (*MCS_GetEncAngSpd)(float *speed, float *angle); + +/** + * @brief motor control FSM state define. + * @details motor control FSM state type: + * + FSM_IDLE -- IDLE state, system startup default. + * + FSM_OFFSET_CALIB -- Self calibrate, for ADC init. + * + FSM_CAP_CHARGE -- IPM cap charge. + * + FSM_CLEAR -- Clear before every run. + * + FSM_LOCATE -- Rotor position pre-locate. + * + FSM_STARTUP -- Start up. + * + FSM_SWITCH -- Transition state, control from open to closed loop. + * + FSM_RUN -- Normal running state. + * + FSM_WAIT_STOP -- Wait stopping. + * + FSM_STOP -- Normal stop. + * + FSM_FAULT -- Fault state, waiting for user process. + */ +typedef enum { + FSM_IDLE = 0, + FSM_OFFSET_CALIB, + FSM_CAP_CHARGE, + FSM_CLEAR, + FSM_LOCATE, + FSM_STARTUP, + FSM_SWITCH, + FSM_RUN, + FSM_WAIT_STOP, + FSM_STOP, + FSM_FAULT +} FsmState; + +/** + * @brief Sampling mode. + */ +typedef enum { + DUAL_RESISTORS = 0, + SINGLE_RESISTOR = 1 +} SampleMode; + +/** + * @brief Motor control data structure + */ +typedef struct { + unsigned char motorStateFlag; + float spdCmdHz; /**< External input speed command value */ + float axisAngle; /**< Angle of the synchronous coordinate system */ + short motorSpinPos; /**< IF启动模式下电机旋转位置*/ + float spdRefHz; /**< Command value after speed ramp management */ + float currCtrlPeriod; /**< current loop control period */ + float adc0Compensate; /**< ADC0 softwaretrim compensate value */ + float adc1Compensate; /**< ADC1 softwaretrim compensate value */ + float udc; /**< Bus voltage */ + float powerBoardTemp; /**< Power boart surface temperature */ + unsigned short aptMaxcntCmp; /**< Apt Maximum Comparison Count */ + float adcCurrCofe; /**< Adc current sampling cofeature */ + + unsigned short sysTickCnt; /**< System Timer Tick Count */ + unsigned short capChargeTickNum; /**< Bootstrap Capacitor Charge Tick Count */ + volatile unsigned int msTickCnt; /**< Millisecond-level counter, which can be used in 1-ms and 5-ms tasks. */ + unsigned short msTickNum; /**< Number of ticks corresponding to 1 ms */ + char obserType; /**< Set Observer Type */ + char controlMode; /**< Set foc control or sixstep bldc control mode or others */ + char spdAdjustMode; /**< Set speed adjust mode */ + char uartConnectFlag; /**< Uart connect success flag */ + short uartHeartDetCnt; /**< Uart connect heart detect count */ + float uartTimeStamp; /**< Uart data time stamp */ + SysStatusReg statusReg; /**< System status */ + FsmState stateMachine; /**< Motor Control State Machine */ + + SampleMode sampleMode; /**< sample mode */ + MOTOR_Param mtrParam; /**< Motor parameters */ + FOSMO_Handle smo; /**< SMO observer handle */ + SMO4TH_Handle smo4th; /**< SMO 4th observer handle */ + EncoderHandle *encHandle; /**< Encoder parameter handle */ + IF_Handle ifCtrl; /**< I/F control handle */ + SVPWM_Handle sv; /**< SVPWM Handle */ + R1SVPWM_Handle r1Sv; /**< Single-resistance phase-shifted SVPWM handld */ + RMG_Handle spdRmg; /**< Ramp management struct for the speed controller input reference */ + SPDCTRL_Handle spdCtrl; /**< Speed loop Control Handle */ + POSCTRL_Handle posCtrl; /**< Position controller handle. */ + CURRCTRL_Handle currCtrl; /**< Current loop control handle */ + STARTUP_Handle startup; /**< Startup Switch Handle */ + FW_Handle fw; /**< Flux-Weakening Handle */ + + DqAxis idqRef; /**< Command value of the dq axis current */ + UvwAxis currUvw; /**< Three-phase current sampling value */ + AlbeAxis iabFbk; /**< αβ-axis current feedback value */ + DqAxis idqFbk; /**< Current feedback value of the dq axis */ + DqAxis vdqRef; /**< Current loop output dq voltage */ + AlbeAxis vabRef; /**< Current loop output voltage αβ */ + UvwAxis dutyUvw; /**< UVW three-phase duty cycle */ + UvwAxis dutyUvwLeft; /**< Single Resistor UVW Three-Phase Left Duty Cycle */ + UvwAxis dutyUvwRight; /**< Single Resistor UVW Three-Phase Right Duty Cycle*/ + + MCS_ReadCurrUvwCb readCurrUvwCb; /**< Read current callback function */ + MCS_SetPwmDutyCb setPwmDutyCb; /**< Set the duty cycle callback function. */ + MCS_SetADCTriggerTimeCb setADCTriggerTimeCb; /**< Sets the ADC trigger point callback function. */ + + MotorProtStatus_Handle prot; /**< Protection handle. */ + + MCS_GetEncAngSpd getEncAngSpd; /**< Get the angle and speed of the encoder. */ + short encReady; + float encSpeed; + float encAxisAngle; +} MTRCTRL_Handle; + +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_chip_config.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_chip_config.h new file mode 100644 index 00000000..2fc50e46 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_chip_config.h @@ -0,0 +1,81 @@ +/** + * @ Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_chip_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H/ECBMCU201MPC app. + */ + +#ifndef McuMagicTag_MCS_CHIPCONFIG_H +#define McuMagicTag_MCS_CHIPCONFIG_H + +#include "feature.h" + +#ifdef CHIP_3061MNPICA + + #define ADCPTT_HANDLE g_adc0 + #define ADCRESIS_HANDLE g_adc0 + #define ADCUDC_HANDLE g_adc0 + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc0 + #define LED1_HANDLE g_gpio2 + #define LED2_HANDLE g_gpio1 + #define LED2_PIN GPIO_PIN_0 + #define LED1_PIN GPIO_PIN_3 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCUSOCNUM ADC_SOC_NUM1 + #define ADCRESISSOCNUM ADC_SOC_NUM3 + #define ADCUDCSOCNUM ADC_SOC_NUM4 + #define ADCWSOCNUM ADC_SOC_NUM6 + + #define ADC0COMPENSATE 2037.0f + #define ADC1COMPENSATE 2027.0f + + #define QDMNUM QDM1 + #define QDMIRQNUM IRQ_QDM1 + #define QDMBASEADDR QDM1_BASE + +#endif + +#if defined (CHIP_3065HRPIRZ) || defined (CHIP_3065ARPIRZ) + + #define ADCU_HANDLE g_adc0 + #define ADCW_HANDLE g_adc1 + #define ADCRESIS_HANDLE g_adc2 + #define ADCUDC_HANDLE g_adc2 + #define ADCPTT_HANDLE g_adc2 + #define LED1_HANDLE g_gpio0 + #define LED2_HANDLE g_gpio0 + #define LED2_PIN GPIO_PIN_6 + #define LED1_PIN GPIO_PIN_7 + #define ADCPTTSOCNUM ADC_SOC_NUM0 + #define ADCRESISSOCNUM ADC_SOC_NUM1 + #define ADCUSOCNUM ADC_SOC_NUM8 + #define ADCWSOCNUM ADC_SOC_NUM8 + #define ADCUDCSOCNUM ADC_SOC_NUM14 + + #define ADC0COMPENSATE 2033.0f + #define ADC1COMPENSATE 2070.0f + + #define QDMNUM QDM0 + #define QDMIRQNUM IRQ_QDM0 + #define QDMBASEADDR QDM0_BASE + +#endif + + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_ctlmode_config.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_ctlmode_config.h new file mode 100644 index 00000000..0c158026 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_ctlmode_config.h @@ -0,0 +1,75 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_ctlmode_config.h + * @author MCU Algorithm Team + * @brief This file provides config macros for ECMCU105H app. + */ + + /* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_CTLMODECONFIG_H +#define McuMagicTag_MCS_CTLMODECONFIG_H + +#include "debug.h" +#include "typedefs.h" + +typedef enum { + FOC_STARTUP_IF = 0, + FOC_STARTUP_VF, + FOC_STARTUP_HFI +} MOTOR_STARTUPMODE_CONFIG; + +typedef enum { + FOC_OBSERVERTYPE_SMO1TH = 0, + FOC_OBSERVERTYPE_SMO1TH_PLL, + FOC_OBSERVERTYPE_ENC, + FOC_OBSERVERTYPE_SMO4TH_PLL, + FOC_OBSERVERTYPE_LUNBORG, + FOC_OBSERVERTYPE_FLUX, + FOC_OBSERVERTYPE_SMO4TH +} MOTOR_OBSERVERTYPE_CONFIG; + +typedef enum { + FOC_CONTROLMODE_SPEED = 0, + FOC_CONTROLMODE_TORQUE, + FOC_CONTROLMODE_POS +} MOTOR_CONTROLMODE_CONFIG; + +typedef enum { + FOC_CURQAXISPID_PARAMS = 0, + FOC_CURDAXISPID_PARAMS, + FOC_SPDPID_PARAMS +} MOTOR_PID_SET; + +typedef enum { + MOTOR_PARAMS_BASE = 0, + MOTOR_PARAMS_SPECIAL, + MOTOR_PARAMS_BOARD +} MOTOR_PARAMS_SET; + +typedef enum { + CUST_SPEED_ADJUST = 0, + HOST_SPEED_ADJUST +} MODE_ADSPEED_CONFIG; + +typedef enum { + CONNECTING = 0, + CONNECTED, + DISCONNECT +} UART_STATUS; + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_ex_common.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_ex_common.h new file mode 100644 index 00000000..fe7117d9 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_ex_common.h @@ -0,0 +1,78 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_ex_common.h + * @author MCU Algorithm Team + * @brief + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef MCU_MAGICTAG_MCS_EX_COMMON_H +#define MCU_MAGICTAG_MCS_EX_COMMON_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "interrupt_ip.h" +#include "typedefs.h" + +#define CRG_ENABLE_VALUE 3 + +#define CPU_FRQ_HZ 200000000u /* CPU frequency */ +#define CPU_MHZ 1000000u +#define TIMER_FRQ_DIV 2 + +/** + * @defgroup EXTEND EXTEND + * @brief Extend common module. + * @{ + */ + +/** + * @defgroup EXTEND_Common EXTEND Common + * @brief EXTEND common external module. + * @{ + */ + +/* Typedef definitions ------------------------------------------------------------------------- */ + +/** + * @defgroup EXTEND_Param_Def EXTEND Parameters Definition + * @brief Definition of EXTEND parameters. + * @{ + */ + +typedef struct { + IRQ_ID irqNum; /* Interrupt Number */ + void *baseAddr; /* Peripherals baseAddr */ +} NvicHandle; + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#endif diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_inc_enc.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_inc_enc.h new file mode 100644 index 00000000..97fbda72 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_inc_enc.h @@ -0,0 +1,126 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_incremental_enc.h + * @author MCU Algorithm Team + * @brief This file provides function of QDM module and encoder speed angle calculation. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef MCU_MAGICTAG_MCS_INC_ENC_H +#define MCU_MAGICTAG_MCS_INC_ENC_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "qdm_ip.h" +#include "mcs_ex_common.h" + +/* Macro definitions --------------------------------------------------------------------------- */ +#define SPDBUF_MAXSIZE 20 + +/** + * @brief QDM Peripheral management. + */ +typedef struct { + void *qdmAddr; /* QDM peripheral address */ + NvicHandle zPulsesNvic; +} MCS_QdmHandle; + +/** + * @brief QDM initialization structure. + */ +typedef struct { + void *qdmAddr; /**< QDM peripheral address */ + NvicHandle *zPlusesNvic; /**< z Pulse Interrupt Configuration */ + unsigned int zPlusesIrqPrio; /**< Interrupt priority */ + IRQ_PROC_FUNC zPlusesIrqFunc; /**< Interrupt function */ +} MCS_QdmInitStru; + +/** + * @brief Encoder motor parameter structure. + */ +typedef struct { + signed int mtrPPMR; /**< pulse per mechanical round */ + unsigned int zShift; /**< pulse Z shift */ + unsigned int mtrNp; /**< numbers of pole pairs */ + float ctrlPeriod; /**< The encoder calculates the control period. */ + /**< the times of compute the angle, if reach the specified num, it will be reset to 0 again */ + unsigned int timeNum; +} MCS_EncInitStru; + +/** + * @brief encoder control data structure. + */ +typedef struct { + signed int pulsePerMechRound; /**< pulses of each mechanical round */ + signed int pulsePerElecRound; /**< pulses of each eletricity period */ + signed short zShift; /**< Z-pulse cheap compensation */ + float elecAngle; /**< electricity angle */ + float mechAngle; /**< motor mechine angle */ + unsigned short cntNow; /**< counter for now */ + unsigned short cntPre; /**< counter of last record */ + signed short pulsePos; /**< Number of pulses corresponding to mechanical + position [-32768, 32767] */ + float elecSpeed; /**< elec speed, in HZ */ + signed short speedBuf[SPDBUF_MAXSIZE]; /**< speed buffer */ + signed short speedBufSize; /**< speed buffer size */ + signed short speedBufIndex; /**< speed bufer index */ + float pulseToHzPu; /**< pulse to HZ transition value */ + + unsigned short timeCnt; /**< times of compute the angle, the carrier ISR call times */ + /**< the times of compute the angle, if reach the specified num, it will be reset to 0 again */ + unsigned short timeNum; + + unsigned short pulZCnt; /**< counter of Z pulse */ + unsigned short pulseAngle; /**< Number of pulses corresponding to electrical angle. + [0, pulsePerElecRound-1] */ + float pulseToElecAngle; /**< pulse to electricity angle transition */ + unsigned short testAngle; +} EncoderHandle; +/** + * @} + */ + +/** + * @defgroup MCS_INC_ENC_Declaration incremental encoder. + * @{ + */ +void MCS_QdmInit(MCS_QdmInitStru *qdmInit); +void MCS_GetEncoderCnt(EncoderHandle *handle, QDM_RegStruct *qdm); +void MCS_GetElecAngleByEnc(EncoderHandle *handle); +void MCS_GetElecSpeedByEnc(EncoderHandle *handle); +void MCS_EncoderClear(EncoderHandle *handle); +void MCS_EncoderInit(EncoderHandle *handle, MCS_EncInitStru *encParam); +/** + * @brief Get the QDM position counter. + * @retval unsigned short QDM SCNT. + */ +static inline unsigned short MCS_GetQdmPosCnt(QDM_RegStruct *qdm) +{ + return (unsigned short)(qdm->QPOSCNT); +} +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#endif /* McuMagicTag_MCS_INC_ENC_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_motor_process.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_motor_process.h new file mode 100644 index 00000000..783bf214 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_motor_process.h @@ -0,0 +1,45 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.h + * @author MCU Algorithm Team + * @brief This file provides motor sample functions declaration for ECMCU105H board. + */ +#ifndef McuMagicTag_MCS_MOTOR_PROCESS_H +#define McuMagicTag_MCS_MOTOR_PROCESS_H + +/** + * @brief phase sequence. + */ +typedef enum { + PHASE_U = 0, + PHASE_V, + PHASE_W, + PHASE_MAX_NUM +} MCS_PhaseEnum; + +/** + * @brief key state. + */ +typedef enum { + KEY_DOWN = 0, + KEY_UP = 1, +} KEY_State; + +int MotorMainProcess(void); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_status.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_status.h new file mode 100644 index 00000000..19510c78 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_status.h @@ -0,0 +1,188 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_status.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_STATUS_H +#define McuMagicTag_MCS_STATUS_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "typedefs.h" +#include "mcs_assert.h" + +/* Typedef definitions ------------------------------------------------------------------------- */ +/** + * @brief System status define + */ +typedef union { + unsigned short all; + struct { + unsigned short cmdStart : 1; /**< Indicates that a start system command has been received. */ + unsigned short cmdStop : 1; /**< Indicates that a stop system command has been received. */ + unsigned short isRunning : 1; /**< Indicates that the system is running (enable signal) */ + unsigned short sysError : 1; /**< Indicates that the system reports an error. */ + unsigned short poweron : 1; /**< Indicates that the power-on initialization phase is complete. */ + unsigned short capcharge : 1; /**< Indicates that the bootstrap capacitor charging phase is complete. */ + unsigned short adczero : 1; /**< The current sampling point is reset to zero after power-on. */ + } Bit; +} SysStatusReg; + +/** + * @brief Get status of Bit cmdStart. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStart(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStart == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStart. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStartSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 1; +} + +/** + * @brief Clear Bit cmdStart. + * @param handle System status register handle. + * @retval None. + */ +static inline void SysCmdStartClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStart = 0; +} + +/** + * @brief Get status of Bit cmdStop. + * @param sysStatus System status register handle. + * @retval Status of Bit cmdStart. + */ +static inline bool SysGetCmdStop(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.cmdStop == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 1; +} + +/** + * @brief Clear Bit cmdStop. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysCmdStopClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.cmdStop = 0; +} + +/** + * @brief Get status of Bit isRunning. + * @param sysStatus System status register handle. + * @retval Status of Bit isRunning. + */ +static inline bool SysIsRunning(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.isRunning == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 1; +} + +/** + * @brief Clear Bit isRuning. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysRunningClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.isRunning = 0; +} + +/** + * @brief Get status of Bit sysError. + * @param sysStatus System status register handle. + * @retval Status of Bit sysError. + */ +static inline bool SysIsError(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + bool ret; + ret = (sysStatus->Bit.sysError == 1) ? true : false; + return ret; +} + +/** + * @brief Set Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorSet(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 1; +} + +/** + * @brief Clear Bit sysError. + * @param sysStatus System status register handle. + * @retval None. + */ +static inline void SysErrorClr(SysStatusReg *sysStatus) +{ + MCS_ASSERT_PARAM(sysStatus != NULL); + sysStatus->Bit.sysError = 0; +} + +#endif diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_user_config.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_user_config.h new file mode 100644 index 00000000..95a8aa17 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/inc/mcs_user_config.h @@ -0,0 +1,143 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_user_config.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of user config parameters. + */ +#ifndef McuMagicTag_MCS_CONFIG_H +#define McuMagicTag_MCS_CONFIG_H + +#include "debug.h" +#include "typedefs.h" + +#define SYSTICK_PERIOD_US 500u /* Systick定时器的周期,单位为微秒 */ + +#define INV_CAP_CHARGE_MS 3u /* 反向电容充电时间,单位为毫秒 */ + +#define INV_VOLTAGE_BUS 24.0f // 总线电压,单位为伏特 + +#define CTRL_CURR_PERIOD 0.0001f /* 载波中断服务例程的周期,100微秒 */ +#define CTRL_SYSTICK_PERIOD 0.0005f /* Systick控制周期,500微秒 */ + +/* 采样窗口的占空比,实际时间为0.06*50us = 3us。 */ +#define SAMPLE_WINDOW_DUTY 0.06f + +/* 采样点移位作为翻转点的占空比,实际时间为0.008*50us = 0.4us。 */ +#define SAMPLE_POINT_SHIFT 0.008f + +/* 采样电阻200毫欧姆,0.0013295 */ +#define ADC_CURR_COFFI 0.0013295f /* 3.3/4096/3.03/0.2 pga: 3.03, 200mohm */ +/* APT */ +#define APT_SYNC_IN_SRC APT_SYNCIN_SRC_APT0_SYNCOUT /* APT同步输入源 */ + +#define APT_U APT0_BASE /* U相APT模块的基地址 */ +#define APT_V APT1_BASE /* V相APT模块的基地址 */ +#define APT_W APT2_BASE /* W相APT模块的基地址 */ + +/* User_Commond */ +#define CTRL_IF_CURR_AMP_A 1.0f /* IF控制电流幅值 */ +#define USER_TARGET_SPD_HZ 40.0f /* 用户目标速度,单位为赫兹,括号用于输入负指令 */ + +#define USER_MIN_SPD_HZ 5.0f /* 电机最小速度限制,单位为赫兹 */ +#define USER_MAX_SPD_HZ 200.0f /* 电机最大速度限制,单位为赫兹 */ +#define USER_SPD_SLOPE 30.0f /* 速度变化斜率 */ +#define USER_CURR_SLOPE (CTRL_IF_CURR_AMP_A * 5.0f) /* 电流变化斜率 */ + +/* PID PARAMS */ +#define CURRQAXIS_KP 0.7414f /* Q轴电流PID控制器的比例系数 */ +#define CURRQAXIS_KI 1256.0f /* Q轴电流PID控制器的积分系数 */ +#define CURRDAXIS_KP 0.7414f /* D轴电流PID控制器的比例系数 */ +#define CURRDAXIS_KI 1256.0f /* D轴电流PID控制器的积分系数 */ +#define CURR_LOWERLIM (-INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.95f) /* 电流下限 */ +#define CURR_UPPERLIM (INV_VOLTAGE_BUS * ONE_DIV_SQRT3 * 0.95f) /* 电流上限 */ + +#define SPD_KP 0.01f /* 速度PID控制器的比例系数 */ +#define SPD_KI 0.1f /* 速度PID控制器的积分系数 */ +#define SPD_LOWERLIM -1.0f /* 速度下限 */ +#define SPD_UPPERLIM 1.0f /* 速度上限 */ + +#define POS_KP 5.0f /* 位置PID控制器的比例系数 */ +#define POS_KI 0.3f /* 位置PID控制器的积分系数 */ +#define POS_KD 0.01f /* 位置PID控制器的微分系数 */ +#define POS_NS 10.0f /* 位置环Ns参数 */ +#define POS_LOWERLIM -200.0f /* 位置下限 */ +#define POS_UPPERLIM 200.0f /* 位置上限 */ + +/* MOTOR PARAMS */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift */ +/* mtrPsif & mtrJ parameter is not used in this project, temporarily set to 0 */ + +/* 电机参数 */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift */ +/* mtrPsif & mtrJ 参数在这个项目中没有使用,暂时设置为0 */ +// 电机的极对数 +/* 电机的电阻,单位为欧姆 */ +/* 电机的直轴电感,单位为亨利 */ +/* 电机的交轴电感,单位为亨利 */ +/* 电机的磁链,本项目未使用 */ +/* 电机的转动惯量,本项目未使用 */ +/* 电机的最大电气转速,单位为赫兹 */ +/* 电机的最大电流,单位为安培 */ +/* 电机的每转脉冲数 */ +/* 电机的零位偏移 */ + +#define MOTORPARAM_DEFAULTS { \ + .mtrNp = 4, \ + .mtrRs = 0.5f, \ + .mtrLd = 0.000295f, \ + .mtrLq = 0.000295f, \ + .mtrPsif = 0.0f, \ + .mtrJ = 0.0f, \ + .maxElecSpd = 200.0f, \ + .maxCurr = 1.5f, \ + .mtrPPMR = 4000, \ + .zShift = 410, \ +} + +// // //1025电机 +// #define MOTORPARAM_DEFAULTS { \ +// .mtrNp = 21, \ +// .mtrRs = 2.5f, \ +// .mtrLd = 0.066f, \ +// .mtrLq = 0.066f, \ +// .mtrPsif = 0.0f, \ +// .mtrJ = 0.0f, \ +// .maxElecSpd = 200.0f, \ +// .maxCurr = 1.5f, \ +// .mtrPPMR = 4000, \ +// .zShift = 410, \ +// } + + +// // GIM4310-10 +// #define MOTORPARAM_DEFAULTS { \ +// .mtrNp = 14, \ +// .mtrRs = 1.046f, \ +// .mtrLd = 0.000344f, \ +// .mtrLq = 0.000344f, \ +// .mtrPsif = 0.0f, \ +// .mtrJ = 0.0f, \ +// .maxElecSpd = 200.0f, \ +// .maxCurr = 1.5f, \ +// .mtrPPMR = 4000, \ +// .zShift = 410, \ +// } + +#define ADC_UDC_COFFI 0.01289f /* 0.01289 = 3.3/4096*192/12 */ +// ADC和UDC的系数,用于将ADC值转换为实际电压值 +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_cmm.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_cmm.c new file mode 100644 index 00000000..99766bdf --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_cmm.c @@ -0,0 +1,43 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.c + * @author MCU Algorithm Team + * @brief This file contains protection common api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt.h" +#include "mcs_assert.h" + +/** + * @brief Safty-pulse-off function execution to turn off all the power devices. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void ProtSpo_Exec(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /**< Turn off all the six power devices of the inverter. */ + for (unsigned int i = 0; i < MOTOR_PHASE_NUMBER; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_A); + DCL_APT_EnableSwContPWMAction(aptx, APT_PWM_CHANNEL_B); + DCL_APT_ForcePWMOutputLow(aptx); + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_cmm.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_cmm.h new file mode 100644 index 00000000..65e5632f --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_cmm.h @@ -0,0 +1,136 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_cmm.h + * @author MCU Algorithm Team + * @brief This file contains protection function common data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_CMM_H +#define McuMagicTag_MCS_PROT_CMM_H + +#include "typedefs.h" +#include "apt_ip.h" + +/* Macro definitions --------------------------------------------------------------------------- */ +#define MOTOR_PHASE_NUMBER (3) + +#define PROT_VAL_THRESHOLD_NUMS (4) +#define PROT_VAL_THRESHOLD_0 (0) +#define PROT_VAL_THRESHOLD_1 (1) +#define PROT_VAL_THRESHOLD_2 (2) +#define PROT_VAL_THRESHOLD_3 (3) + +#define PROT_LIMIT_TIME_NUMS (3) +#define PROT_LIMIT_TIME_0 (0) +#define PROT_LIMIT_TIME_1 (1) +#define PROT_LIMIT_TIME_2 (2) + +#define MOTOR_PHASE_NUMBER (3) + +/**< Motor error status definition. */ +typedef union { + int all; + struct { + unsigned short overCurrErr : 1; /**<表示相电流超过保护值*/ + unsigned short overVoltErr : 1; /**<表示直流链路电压超过保护值*/ + unsigned short lowerVoltErr : 1; /**<表示直流链路电压低于保护值*/ + unsigned short overIpmTempErr : 1; /**<表示IPM温度超过保护值*/ + unsigned short revRotErr : 1; /**<表示电机为负方向*/ + unsigned short motorStalling : 1; /**<表示转子失速*/ + unsigned short overMotorTempErr : 1; /**<表示三相电流不平衡*/ + unsigned short posSnsrCommsErr : 1; /**<表示位置传感器与MCU的通信中断*/ + unsigned short posSnsrFuncErr : 1; /**<表示位置传感器报告功能错误*/ + unsigned short posSnsrCalibrErr : 1; /**<表示位置传感器无法自行校准*/ + unsigned short currOutOfBalance : 1; /**<表示转子反向旋转*/ + unsigned short phsOpenErr : 1; /**<表示相绕组断开*/ + unsigned short phsU : 1; /**<表示发生phsOpenErr时u阶段失败*/ + unsigned short phsV : 1; /**<表示发生phsOpenErr时v阶段失败*/ + unsigned short phsW : 1; /**<表示发生phsOpenErr时w阶段失败*/ + unsigned short multiPhs : 1; /**<表示发生phsOpenErr时多阶段失败*/ + } Bit; +} MotorErrStatusReg; + +/**<保护状态位定义*/ +typedef enum { + OCP_ERR_BIT, + OVP_ERR_BIT, + LVP_ERR_BIT, + OTP_IPM_ERR_BIT, + OTP_MOTOR_ERR_BIT, + STALLING_ERR_BIT, + CURR_OUT_BALANCE_ERR_BIT, + POS_COMMS_ERR_BIT, + POS_FUNC_ERR_BIT, + POS_CALIB_ERR_BIT, + REV_ROT_ERR_BIT, + PHS_OPEN_ERR_BIT, + PHS_U_ERR_BIT, + PHS_V_ERR_BIT, + PHS_W_ERR_BIT, + PHS_MULTI_ERR_BIT, +} PROT_ErrBit; + +/**< Motor error protection level. */ +typedef enum { + PROT_LEVEL_0 = 0, + PROT_LEVEL_1, + PROT_LEVEL_2, + PROT_LEVEL_3, + PROT_LEVEL_4 /**< The greater level number, the severe error is. */ +} PROT_Level; + +/** + * @brief Obtains the status of a bit of data. + * @param data data. + * @param bits Number of digits. + * @retval Bit status. + */ +static inline bool GetBit(int data, unsigned short bit) +{ + bool ret; + ret = ((data >> bit) & 1); + return ret; +} + +/** + * @brief Sets the status of a bit of data. + * @param data data. + * @param bit The setted bit. + * @retval None. + */ +static inline void SetBit(int *data, unsigned char bit) +{ + *data |= (1 << bit); +} + +/** + * @brief Clear the status of a bit of data. + * @param data data. + * @param bit The Clear bit. + * @retval None. + */ +static inline void ClearBit(int *data, unsigned char bit) +{ + *data &= ~(1 << bit); +} + +/**< Protection action. */ +void ProtSpo_Exec(APT_RegStruct **aptAddr); + +#endif diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user.c new file mode 100644 index 00000000..e97876b7 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user.c @@ -0,0 +1,137 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.c + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Get motor over current error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overCurrErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor lower dc-link voltage error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.lowerVoltErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Ipm temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overIpmTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor over Motor temperature error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.overMotorTempErr) { + return true; + } else { + return false; + } +} + +/** + * @brief Get motor stalling error status. + * @param motorErrStatus Motor error status. + * @retval Error status. + */ +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus) +{ + if (motorErrStatus.Bit.motorStalling) { + return true; + } else { + return false; + } +} + +/** + * @brief Clear the motor error status. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + /* Clear the motor error status. */ + motorProt->motorErrStatus.all = 0x00; + OCP_Clear(&motorProt->ocp); + OVP_Clear(&motorProt->ovp); + LVP_Clear(&motorProt->lvp); + OTP_Clear(&motorProt->otp); +} + +/** + * @brief Motor protection function initialization. + * @param motorProt Motor protection handle. + * @retval Error status. + */ +void MotorProt_Init(MotorProtStatus_Handle *motorProt) +{ + MCS_ASSERT_PARAM(motorProt != NULL); + motorProt->motorErrStatus.all = 0x00; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user.h new file mode 100644 index 00000000..365110e1 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user.h @@ -0,0 +1,54 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user.h + * @author MCU Algorithm Team + * @brief This file contains user protection data struct, inquiry api and initialization api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_H +#define McuMagicTag_MCS_PROT_USER_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_curr_prot.h" +#include "mcs_dc_volt_prot.h" +#include "mcs_temp_prot.h" +#include "mcs_motor_stalling.h" +#include "typedefs.h" + +typedef struct { + MotorErrStatusReg motorErrStatus; /**< Motor error status. */ + OCP_Handle ocp; /**< Over current protection. */ + OVP_Handle ovp; /**< Over dc-link voltage protection. */ + LVP_Handle lvp; /**< Lower dc-link voltage protection. */ + OTP_Handle otp; /**< Over IPM temperature protection. */ + STP_Handle stall; /**< Motor stalling protection. */ +} MotorProtStatus_Handle; + +void MotorProt_Init(MotorProtStatus_Handle *motorProt); + +/**< Inquiry motor error status */ +bool IsMotorOverCurrErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkOverVoltErr(MotorErrStatusReg motorErrStatus); +bool IsDcLinkLowerVoltErr(MotorErrStatusReg motorErrStatus); +bool IsIpmOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorOverTempErr(MotorErrStatusReg motorErrStatus); +bool IsMotorStallingErr(MotorErrStatusReg motorErrStatus); +void ClearMotorErrStatus(MotorProtStatus_Handle *motorProt); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user_config.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user_config.h new file mode 100644 index 00000000..988c519d --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/common/mcs_prot_user_config.h @@ -0,0 +1,130 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_prot_user_config.h + * @author MCU Algorithm Team + * @brief This file contans user macro definition of the protection function. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_PROT_USER_CONFIG_H +#define McuMagicTag_MCS_PROT_USER_CONFIG_H + +/* Macro definitions --------------------------------------------------------------------------- */ + +/**< COMMON */ +/**<连续运行时电机或IPM的峰值相电流(A)*/ +#define PROT_MOTOR_RATED_CURR (1.0f) +/**<只有几次连续的故障检测才能触发错误状态*/ +#define PROT_CNT_LIMIT (100) +/**<只有几个连续的无故障检测才能触发错误状态的消除*/ +#define RECY_CNT_LIMIT (10000) +/**<只有几个连续的无故障检测才能触发错误状态的消除*/ +#define OVER_VOLT_RECY_CNT_LIMIT (100) +/**<只有几个连续的无故障检测才能触发错误状态的消除*/ +#define LOWER_VOLT_RECY_CNT_LIMIT (100) + +/**<过电流保护*/ +/**<处于1级时的过电流触发值(A)*/ +#define PROT_OVER_CURR_POW_DN1 (2.0f * PROT_MOTOR_RATED_CURR) +/**<处于2级时的过电流触发值(A)*/ +#define PROT_OVER_CURR_POW_DN2 (2.0f * PROT_MOTOR_RATED_CURR) +/**<处于3级时的过电流触发值(A)*/ +#define PROT_OVER_CURR_POW_DN3 (2.0f * PROT_MOTOR_RATED_CURR) +/**<处于4级时的过电流触发值(A)*/ +#define PROT_OVER_CURR_POW_OFF (2.0f * PROT_MOTOR_RATED_CURR) +#define PROT_OVER_CURR_RECY_DELTA (0.0035f) /*<从保护状态恢复时的电流间隙(A)*/ +#define PROT_OVER_CURR_LIMIT1_TIME_SEC (30.0f) /**<20%过载的最长持续时间:30秒*/ +#define PROT_OVER_CURR_LIMIT2_TIME_SEC (10.0f) /**<20%过载的最长持续时间:10秒*/ +#define PROT_OVER_CURR_LIMIT3_TIME_SEC (2.0f) /**<20%过载的最长持续时间:2秒*/ + +/**< Over voltage protection */ +#define PROT_OVER_VOLT_BRK_ON1 (26.0f) /**<处于1级时,直流链路电压触发值(V)过高*/ +#define PROT_OVER_VOLT_BRK_ON2 (27.0f) /**< Over dc-link voltage trigger value (V) when in level 2. */ +#define PROT_OVER_VOLT_BRK_ON3 (28.0f) /**< Over dc-link voltage trigger value (V) when in level 3. */ +#define PROT_OVER_VOLT_BRK_ALL (30.0f) /**< Over dc-link voltage trigger value (V) when in level 4. */ +#define PROT_OVER_VOLT_RECY_DELTA (0.5f) /**<从保护状态恢复时的电压间隙(V)*/ +#define PROT_OVER_VOLT_LIMIT1_TIME_SEC (5.0f) /**1;单循环模式:<0.5*/ +#define POS_SNSR_IPD_INJ_PERIOD (4) + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_curr_prot.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_curr_prot.c new file mode 100644 index 00000000..da4e56f8 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_curr_prot.c @@ -0,0 +1,267 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.c + * @author MCU Algorithm Team + * @brief This file contains current protecion api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_curr_prot.h" +#include "mcs_math.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over current protection function. + * @param ocp Over current protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OCP_Init(OCP_Handle *ocp, float ts) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ocp->ts = ts; + OCP_Clear(ocp); + + ocp->protCntLimit = PROT_CNT_LIMIT; + ocp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring four levels of current protection thresholds. */ + ocp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_CURR_POW_DN1; + ocp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_CURR_POW_DN2; + ocp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_CURR_POW_DN3; + ocp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_CURR_POW_OFF; + /* Configure the protection limit time. */ + ocp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_CURR_LIMIT1_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_CURR_LIMIT2_TIME_SEC; + ocp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_CURR_LIMIT3_TIME_SEC; + ocp->recyDelta = PROT_OVER_CURR_RECY_DELTA; +} + +/** + * @brief Over current protection detection. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + /* Calculate current amplitude. */ + ocp->currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + + /* Check if value goes over threshold for continuous cycles. */ + if (ocp->currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0]) { + ocp->protCnt = 0; + return; + } + + if (ocp->protCnt < ocp->protCntLimit) { + ocp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_3] && ocp->protLevel < PROT_LEVEL_4) { + ocp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_2] && ocp->protLevel < PROT_LEVEL_3) { + ocp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_1] && ocp->protLevel < PROT_LEVEL_2) { + ocp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (ocp->currAmp >= ocp->protValThr[PROT_VAL_THRESHOLD_0] && ocp->protLevel < PROT_LEVEL_1) { + ocp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overCurrErr = 1; + ocp->protCnt = 0; + ocp->timer = 0.0f; + return; + } +} + +/** + * @brief Over current protection execution. + * @param ocp Over current protection handle. + * @param idqRef DQ-axis current references. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ocp != NULL); + MCS_ASSERT_PARAM(idqRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + + float id = idqRef->d; + float iq = idqRef->q; + float idqAmp = ocp->currAmp; + /* According to protect level, take corresponding action. */ + switch (ocp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + idqRef->d = 0.0f; + idqRef->q = 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_2]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_1]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + ocp->timer += ocp->ts; + if (ocp->timer > ocp->protLimitTime[PROT_LIMIT_TIME_0]) { + idqRef->d = id / idqAmp * PROT_MOTOR_RATED_CURR; + idqRef->q = iq / idqAmp * PROT_MOTOR_RATED_CURR; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } +} + +/** + * @brief Over current protection recovery. + * @param ocp Over current protection handle. + * @param motorErrStatus Motor error status. + * @retval None. + */ +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overCurrErr) { + return; + } + + /* Calculate current amplitude. */ + float currAmp = ocp->currAmp; + + /* According to protection level, take corresponding recovery action. */ + switch (ocp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_3] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_3; + ocp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_2] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_2; + ocp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_1] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_1; + ocp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + if (currAmp < ocp->protValThr[PROT_VAL_THRESHOLD_0] - ocp->recyDelta) { + ocp->recyCnt++; + if (ocp->recyCnt > ocp->recyCntLimit) { + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + } + } + break; + + /* level 0 */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overCurrErr = 0; + break; + + default: + break; + } +} + +/** + * @brief Over current protection error status clear. + * @param ocp Over current protection handle. + * @retval None. + */ +void OCP_Clear(OCP_Handle *ocp) +{ + MCS_ASSERT_PARAM(ocp != NULL); + /* Clear the history value. */ + ocp->protCnt = 0; + ocp->protLevel = PROT_LEVEL_0; + ocp->recyCnt = 0; + ocp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_curr_prot.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_curr_prot.h new file mode 100644 index 00000000..e9916fe4 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_curr_prot.h @@ -0,0 +1,52 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_curr_prot.h + * @author MCU Algorithm Team + * @brief This file contains current protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_CURR_PROT_H +#define McuMagicTag_MCS_CURR_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "mcs_typedef.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float currAmp; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OCP_Handle; + +void OCP_Init(OCP_Handle *ocp, float ts); +void OCP_Det(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus, DqAxis idq); +void OCP_Exec(OCP_Handle *ocp, DqAxis *idqRef, APT_RegStruct **aptAddr); +void OCP_Recy(OCP_Handle *ocp, MotorErrStatusReg *motorErrStatus); +void OCP_Clear(OCP_Handle *ocp); + +#endif diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_dc_volt_prot.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_dc_volt_prot.c new file mode 100644 index 00000000..b0541a2e --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_dc_volt_prot.c @@ -0,0 +1,495 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.c + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection api declaration. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_dc_volt_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over dc-link voltage protection function. + * @param ovp Over dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void OVP_Init(OVP_Handle *ovp, float ts) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + ovp->ts = ts; + OVP_Clear(ovp); + ovp->protCntLimit = PROT_CNT_LIMIT; + ovp->recyCntLimit = OVER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of overvoltage protection thresholds. */ + ovp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_VOLT_BRK_ON1; + ovp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_VOLT_BRK_ON2; + ovp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_VOLT_BRK_ON3; + ovp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_VOLT_BRK_ALL; + /* Configure the protection limit time. */ + ovp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_VOLT_LIMIT1_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_VOLT_LIMIT2_TIME_SEC; + ovp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_VOLT_LIMIT3_TIME_SEC; + ovp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Initilization lower dc-link voltage protection function. + * @param lvp Lower dc-link voltage protection handle. + * @param ts Ctrl period (s). + * @retval None. + */ +void LVP_Init(LVP_Handle *lvp, float ts) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + + lvp->ts = ts; + LVP_Clear(lvp); + + lvp->protCntLimit = PROT_CNT_LIMIT; + lvp->recyCntLimit = LOWER_VOLT_RECY_CNT_LIMIT; + /* Configuring four levels of lower voltage protection thresholds. */ + lvp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_LOWER_VOLT_POW_DN1; + lvp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_LOWER_VOLT_POW_DN2; + lvp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_LOWER_VOLT_POW_DN3; + lvp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_LOWER_VOLT_POW_OFF; + /* Configure the protection limit time. */ + lvp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_LOWER_VOLT_LIMIT1_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_LOWER_VOLT_LIMIT2_TIME_SEC; + lvp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_LOWER_VOLT_LIMIT3_TIME_SEC; + lvp->recyDelta = PROT_OVER_VOLT_RECY_DELTA; +} + +/** + * @brief Over dc-link voltage protection detection. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0]) { + ovp->protCnt = 0; + return; + } + + if (ovp->protCnt < ovp->protCntLimit) { + ovp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_3] && ovp->protLevel < PROT_LEVEL_4) { + ovp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_2] && ovp->protLevel < PROT_LEVEL_3) { + ovp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_1] && ovp->protLevel < PROT_LEVEL_2) { + ovp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc >= ovp->protValThr[PROT_VAL_THRESHOLD_0] && ovp->protLevel < PROT_LEVEL_1) { + ovp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.overVoltErr = 1; + ovp->protCnt = 0; + ovp->timer = 0.0f; + return; + } +} + +/** + * @brief Lower dc-link voltage protection detection. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage feedback (V). + * @retval None. + */ +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(udc > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0]) { + lvp->protCnt = 0; + return; + } + + if (lvp->protCnt < lvp->protCntLimit) { + lvp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_3] && lvp->protLevel < PROT_LEVEL_4) { + lvp->protLevel = PROT_LEVEL_4; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_2] && lvp->protLevel < PROT_LEVEL_3) { + lvp->protLevel = PROT_LEVEL_3; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_1] && lvp->protLevel < PROT_LEVEL_2) { + lvp->protLevel = PROT_LEVEL_2; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (udc <= lvp->protValThr[PROT_VAL_THRESHOLD_0] && lvp->protLevel < PROT_LEVEL_1) { + lvp->protLevel = PROT_LEVEL_1; + motorErrStatus->Bit.lowerVoltErr = 1; + lvp->protCnt = 0; + lvp->timer = 0.0f; + return; + } +} + +/** + * @brief Over dc-link voltage protection execution. + * @param ovp Over dc-link voltage protection handle. + * @param duty Brake loop output duty (0-1). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(ovp != NULL); + MCS_ASSERT_PARAM(duty != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (ovp->protLevel) { + /* level 4: brake loop duty maximum. */ + case PROT_LEVEL_4: + *duty = PROT_OVER_VOLT_BRK_DUTY4; + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + break; + + /* level 3: brake loop duty level 3. */ + case PROT_LEVEL_3: + *duty = PROT_OVER_VOLT_BRK_DUTY2; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_2]) { + *duty = PROT_OVER_VOLT_BRK_DUTY3; + } + break; + + /* level 2: brake loop duty level 2. */ + case PROT_LEVEL_2: + *duty = PROT_OVER_VOLT_BRK_DUTY1; + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_1]) { + *duty = PROT_OVER_VOLT_BRK_DUTY2; + } + break; + + /* level 1: brake loop duty level 1. */ + case PROT_LEVEL_1: + ovp->timer += ovp->ts; + if (ovp->timer > ovp->protLimitTime[PROT_LIMIT_TIME_0]) { + *duty = PROT_OVER_VOLT_BRK_DUTY1; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection execution. + * @param lvp Lower dc-link voltage protection handle. + * @param spdRef Speed Reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(lvp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (lvp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + *spdRef *= PROT_POW_DN1_PCT; + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 1: derate speed reference. */ + case PROT_LEVEL_1: + lvp->timer += lvp->ts; + if (lvp->timer > lvp->protLimitTime[PROT_LIMIT_TIME_0]) { + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection recovery. + * @param ovp Over dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.overVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (ovp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_3] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_3; + ovp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is less than threshold 2, level-2 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_2] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_2; + ovp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is less than threshold 1, level-1 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_1] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_1; + ovp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is less than threshold 0, level-0 protection is restored. */ + if (udc < ovp->protValThr[PROT_VAL_THRESHOLD_0] - ovp->recyDelta) { + ovp->recyCnt++; + if (ovp->recyCnt > ovp->recyCntLimit) { + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.overVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Lower dc-link voltage protection recovery. + * @param lvp Lower dc-link voltage protection handle. + * @param motorErrStatus Motor error status. + * @param udc DC-link voltage (V). + * @retval None. + */ +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* If not under error state, just return without any operation. */ + if (!motorErrStatus->Bit.lowerVoltErr) { + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (lvp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the dc-link voltage is greater than threshold 3, level-3 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_3] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_3; + lvp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the dc-link voltage is greater than threshold 2, level-2 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_2] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_2; + lvp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the dc-link voltage is greater than threshold 1, level-1 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_1] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_1; + lvp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the dc-link voltage is greater than threshold 0, level-0 protection is restored. */ + if (udc > lvp->protValThr[PROT_VAL_THRESHOLD_0] + lvp->recyDelta) { + lvp->recyCnt++; + if (lvp->recyCnt > lvp->recyCntLimit) { + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + } + } + break; + /* level 0 Fault-free state. */ + case PROT_LEVEL_0: + motorErrStatus->Bit.lowerVoltErr = 0; + break; + + default: + break; + } + return; +} + +/** + * @brief Over dc-link voltage protection error status clear. + * @param ovp Over voltage protection handle. + * @retval None. + */ +void OVP_Clear(OVP_Handle *ovp) +{ + MCS_ASSERT_PARAM(ovp != NULL); + /* Clear the history value. */ + ovp->protCnt = 0; + ovp->protLevel = PROT_LEVEL_0; + ovp->recyCnt = 0; + ovp->timer = 0.0f; +} + +/** + * @brief Lower dc-link voltage protection error status clear. + * @param lvp Lower voltage protection handle. + * @retval None. + */ +void LVP_Clear(LVP_Handle *lvp) +{ + MCS_ASSERT_PARAM(lvp != NULL); + /* Clear the history value. */ + lvp->protCnt = 0; + lvp->protLevel = PROT_LEVEL_0; + lvp->recyCnt = 0; + lvp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_dc_volt_prot.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_dc_volt_prot.h new file mode 100644 index 00000000..0435156a --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_dc_volt_prot.h @@ -0,0 +1,69 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_dc_volt_prot.h + * @author MCU Algorithm Team + * @brief This file contains dc-link voltage protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McuMagicTag_MCS_DC_VOLT_PROT_H +#define McuMagicTag_MCS_DC_VOLT_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low voltage level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} OVP_Handle; + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from high voltage level to low. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float timer; + float ts; + PROT_Level protLevel; +} LVP_Handle; + +void OVP_Init(OVP_Handle *ovp, float ts); +void OVP_Det(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Exec(OVP_Handle *ovp, float *duty, APT_RegStruct **aptAddr); +void OVP_Recy(OVP_Handle *ovp, MotorErrStatusReg *motorErrStatus, float udc); +void OVP_Clear(OVP_Handle *ovp); + +void LVP_Init(LVP_Handle *lvp, float ts); +void LVP_Det(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Exec(LVP_Handle *lvp, float *spdRef, APT_RegStruct **aptAddr); +void LVP_Recy(LVP_Handle *lvp, MotorErrStatusReg *motorErrStatus, float udc); +void LVP_Clear(LVP_Handle *lvp); + +#endif diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_motor_stalling.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_motor_stalling.c new file mode 100644 index 00000000..9dee4d2d --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_motor_stalling.c @@ -0,0 +1,112 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.c + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_motor_stalling.h" +#include "mcs_prot_user_config.h" +#include "mcs_math.h" +#include "mcs_math_const.h" +#include "mcs_assert.h" + +/** + * @brief Initilization motor stalling protection function. + * @param stall Motor stalling handle. + * @param ts Ctrl period (s). + * @param currLimit The current amplitude that triggers fault. (A). + * @param spdLimit The speed amplitude that triggers fault. (Hz). + * @param timeLimit The threshold time that current amplitude over the limit (s). + * @retval None. + */ +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + MCS_ASSERT_PARAM(currLimit > 0.0f); + MCS_ASSERT_PARAM(spdLimit > 0.0f); + MCS_ASSERT_PARAM(timeLimit > 0.0f); + /* Configuring parameters for stalling detection. */ + stall->ts = ts; + /* Current threshold and speed threshold for stalling fault. */ + stall->currAmpLimit = currLimit; + stall->spdLimit = spdLimit; + stall->timeLimit = timeLimit; + stall->timer = 0.0f; +} + +/** + * @brief Motor stalling detection. + * @param stall Motor stalling handle. + * @param motorErrStatus Motor error status. + * @param spd Speed feedback (Hz). + * @param idq Dq-axis current feedback (A). + * @retval None. + */ +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq) +{ + MCS_ASSERT_PARAM(stall != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(Abs(spd) >= 0.0f); + /* Calculate current amplitude. */ + float currAmp = Sqrt(idq.d * idq.d + idq.q * idq.q); + float spdAbs = Abs(spd); + /* Check if value goes over threshold for continuous cycles. */ + if (currAmp < stall->currAmpLimit || spdAbs > stall->spdLimit) { + stall->timer = 0.0f; + return; + } + /* Time accumulation. */ + if (stall->timer < stall->timeLimit) { + stall->timer += stall->ts; + return; + } + motorErrStatus->Bit.motorStalling = 1; +} + +/** + * @brief Motor stalling protection execution. + * @param motorErrStatus Motor error status. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + if (motorErrStatus->Bit.motorStalling == 0) { + return; + } + + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + return; +} + +/** + * @brief Motor stalling protection error status clear. + * @param stall Motor stalling handle. + * @retval None. + */ +void STP_Clear(STP_Handle *stall) +{ + MCS_ASSERT_PARAM(stall != NULL); + stall->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_motor_stalling.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_motor_stalling.h new file mode 100644 index 00000000..a1d1e4be --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_motor_stalling.h @@ -0,0 +1,45 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_stalling.h + * @author MCU Algorithm Team + * @brief This file contains motor stalling protection data struct and api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_MOTOR_STALLING_PROT_H +#define McuMagicTag_MCS_MOTOR_STALLING_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" +#include "mcs_typedef.h" + +typedef struct { + float currAmpLimit; /**< Feedback current higher than this value triggers fault. (A). */ + float spdLimit; /**< Feedback speed lower than this value triggers fault (Hz). */ + float timeLimit; /**< The threshold time that current and speed feedback over ranges (s). */ + float timer; /**< Timer to get speed and current over range time. */ + float ts; /**< Ctrl period (s). */ +} STP_Handle; + +void STP_Init(STP_Handle *stall, float ts, float currLimit, float spdLimit, float timeLimit); +void STP_Det_ByCurrSpd(STP_Handle *stall, MotorErrStatusReg *motorErrStatus, float spd, DqAxis idq); +void STP_Exec(MotorErrStatusReg *motorErrStatus, APT_RegStruct **aptAddr); +void STP_Clear(STP_Handle *stall); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_temp_prot.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_temp_prot.c new file mode 100644 index 00000000..184ba4a3 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_temp_prot.c @@ -0,0 +1,262 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.c + * @author MCU Algorithm Team + * @brief This file contains over temperature protection api definition. + */ + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_temp_prot.h" +#include "mcs_prot_user_config.h" +#include "mcs_assert.h" + +/** + * @brief Initilization over temperation protection function. + * @param otp Over temperature protection handle. + * @param ts Ctrl period. + * @retval None. + */ +void OTP_Init(OTP_Handle *otp, float ts) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(ts > 0.0f); + otp->ts = ts; + otp->protCntLimit = PROT_CNT_LIMIT; + otp->recyCntLimit = RECY_CNT_LIMIT; + /* Configuring the temperature protection threshold. */ + otp->protValThr[PROT_VAL_THRESHOLD_0] = PROT_OVER_IPM_TEMP_POW_DN1; + otp->protValThr[PROT_VAL_THRESHOLD_1] = PROT_OVER_IPM_TEMP_POW_DN2; + otp->protValThr[PROT_VAL_THRESHOLD_2] = PROT_OVER_IPM_TEMP_POW_DN3; + otp->protValThr[PROT_VAL_THRESHOLD_3] = PROT_OVER_IPM_TEMP_POW_OFF; + /* Configuring the protection limiting time. */ + otp->protLimitTime[PROT_LIMIT_TIME_0] = PROT_OVER_TEMP_LIMIT1_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_1] = PROT_OVER_TEMP_LIMIT2_TIME_SEC; + otp->protLimitTime[PROT_LIMIT_TIME_2] = PROT_OVER_TEMP_LIMIT3_TIME_SEC; + otp->recyDelta = PROT_OVER_IPM_TEMP_RECY_DELTA; + OTP_Clear(otp); +} + +/** + * @brief Over temperatre protection detection. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param idq DQ-axis feedback currents. + * @retval None. + */ +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* Check if value goes over threshold for continuous cycles. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0]) { + otp->protCnt = 0; + ClearBit(&motorErrStatus->all, protBit); + return; + } + + if (otp->protCnt < otp->protCntLimit) { + otp->protCnt++; + return; + } + + /* Check which protection level should be activated. */ + /* Once enter error status, error status can only be changed by recover api. */ + /* protect level: level 4. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_3] && otp->protLevel < PROT_LEVEL_4) { + otp->protLevel = PROT_LEVEL_4; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + return; + } + + /* Protect level: level 3. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_2] && otp->protLevel < PROT_LEVEL_3) { + otp->protLevel = PROT_LEVEL_3; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 2. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_1] && otp->protLevel < PROT_LEVEL_2) { + otp->protLevel = PROT_LEVEL_2; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } + + /* Protect level: level 1. */ + if (temp >= otp->protValThr[PROT_VAL_THRESHOLD_0] && otp->protLevel < PROT_LEVEL_1) { + otp->protLevel = PROT_LEVEL_1; + SetBit(&motorErrStatus->all, protBit); + otp->protCnt = 0; + otp->timer = 0.0f; + return; + } +} + +/** + * @brief Over temperature protection execution. + * @param otp Over temperature protection handle. + * @param spdRef Speed reference (Hz). + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(spdRef != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + /* According to protect level, take corresponding action. */ + switch (otp->protLevel) { + /* level 4: disable all PWM output. */ + case PROT_LEVEL_4: + /* Disable three-phase pwm output. */ + ProtSpo_Exec(aptAddr); + *spdRef *= 0.0f; + break; + + /* level 3: derate speed reference. */ + case PROT_LEVEL_3: + *spdRef *= PROT_POW_DN2_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_2]) { + *spdRef *= PROT_POW_DN3_PCT; + } + break; + + /* level 2: derate speed reference. */ + case PROT_LEVEL_2: + /* Reducte motor speed to level 2 */ + *spdRef *= PROT_POW_DN1_PCT; + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_1]) { + *spdRef *= PROT_POW_DN2_PCT; + } + break; + + /* level 0: take no protection action. */ + case PROT_LEVEL_0: + break; + + case PROT_LEVEL_1: + /* Reducte motor speed to level 0 */ + otp->timer += otp->ts; + if (otp->timer > otp->protLimitTime[PROT_LIMIT_TIME_0]) { + /* level 1: derate speed reference. */ + *spdRef *= PROT_POW_DN1_PCT; + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection recovery. + * @param otp Over temperature protection handle. + * @param tempErrBit Temperature error status bit. + * @param temp Temperature (celsius). + * @retval None. + */ +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp) +{ + MCS_ASSERT_PARAM(otp != NULL); + MCS_ASSERT_PARAM(motorErrStatus != NULL); + MCS_ASSERT_PARAM(temp > 0.0f); + /* If not under error state, just return without any operation. */ + if (otp->protLevel == PROT_LEVEL_0) { + motorErrStatus->all &= (~(1 >> protBit)); + return; + } + + /* According to protection level, take corresponding recovery action. */ + switch (otp->protLevel) { + /* level 4 */ + case PROT_LEVEL_4: + /* If the temperature is less than threshold 3, level-3 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_3] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_3; + otp->recyCnt = 0; + } + } + break; + + /* level 3 */ + case PROT_LEVEL_3: + /* If the temperature is less than threshold 2, level-2 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_2] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_2; + otp->recyCnt = 0; + } + } + break; + + /* level 2 */ + case PROT_LEVEL_2: + /* If the temperature is less than threshold 1, level-1 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_1] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_1; + otp->recyCnt = 0; + } + } + break; + + /* level 1 */ + case PROT_LEVEL_1: + /* If the temperature is less than threshold 0, level-0 protection is restored. */ + if (temp < otp->protValThr[PROT_VAL_THRESHOLD_0] - otp->recyDelta) { + otp->recyCnt++; + if (otp->recyCnt > otp->recyCntLimit) { + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + } + } + break; + + default: + break; + } + return; +} + +/** + * @brief Over temperature protection error status clear. + * @param otp Over temperature protection handle. + * @retval None. + */ +void OTP_Clear(OTP_Handle *otp) +{ + MCS_ASSERT_PARAM(otp != NULL); + /* Clear the history value. */ + otp->protCnt = 0; + otp->protLevel = PROT_LEVEL_0; + otp->recyCnt = 0; + otp->timer = 0.0f; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_temp_prot.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_temp_prot.h new file mode 100644 index 00000000..2b9d99a7 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/protection/mcs_temp_prot.h @@ -0,0 +1,49 @@ +/** + * @copyright Copyright (c) 2023, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_temp_prot.h + * @author MCU Algorithm Team + * @brief his file contains over temperature protection api declaration. + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_MCS_TEMP_PROT_H +#define McuMagicTag_MCS_TEMP_PROT_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "mcs_prot_cmm.h" +#include "apt_ip.h" + +typedef struct { + unsigned int protCnt; + unsigned int recyCnt; + unsigned int protCntLimit; + unsigned int recyCntLimit; + float protValThr[PROT_VAL_THRESHOLD_NUMS]; /* from low current level to high. */ + float protLimitTime[PROT_LIMIT_TIME_NUMS]; /* from level 3 to level 1. */ + float recyDelta; + float ts; + float timer; + PROT_Level protLevel; +} OTP_Handle; + +void OTP_Init(OTP_Handle *otp, float ts); +void OTP_Det(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Exec(OTP_Handle *otp, float *spdRef, APT_RegStruct **aptAddr); +void OTP_Recy(OTP_Handle *otp, MotorErrStatusReg *motorErrStatus, PROT_ErrBit protBit, float temp); +void OTP_Clear(OTP_Handle *otp); +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/readme.md b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/readme.md new file mode 100644 index 00000000..592524f0 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/readme.md @@ -0,0 +1,12 @@ +# pmsm_encode_qdm_2shunt_foc + +**【功能描述】** ++ 基于ECMCU105H/ECBMCU201MPC单板的单电机双电阻采样的有感Foc应用 + +**【环境要求】** ++ 所有单板电源改制为演示用的24V低压,电机选用42JSF630AS-1000 ++ 电机ABZ编码器线序分别对应功率板上ABZ通道接口 ++ 电机(绿蓝黄)相线分别对应功率板上U/V/W通道接口 + +**【IDE配置方法】** ++ chipConfig中的Sample栏目里面选中pmsm encode qdm 2shunt foc示例,然后点击生成代码即可 diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_carrier.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_carrier.c new file mode 100644 index 00000000..4f8c9d37 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_carrier.c @@ -0,0 +1,136 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_carrier.c + * @author MCU Algorithm Team + * @brief This file provides carrier interrupt application for motor control. + */ + +#include "mcs_carrier.h" +#include "mcs_math.h" +#include "typedefs.h" +#include "mcs_assert.h" +#include "mcs_user_config.h" +#include "mcs_ctlmode_config.h" + +/** + * @brief 同步旋转坐标系角度。 + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_SyncCoorAngle(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* Synchronous rotation coordinate system angle. */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + /* 当前斜坡角度为0。 */ + if (mtrCtrl->startup.stage == STARTUP_STAGE_CURR) { + mtrCtrl->axisAngle = 0; + } else if (mtrCtrl->startup.stage == STARTUP_STAGE_SPD) { /* 中频控制相位角自加。 */ + mtrCtrl->axisAngle = IF_CurrAngleCalc(&mtrCtrl->ifCtrl, mtrCtrl->spdRefHz); + } + break; + + case FSM_RUN: + mtrCtrl->axisAngle = mtrCtrl->encAxisAngle; + break; + + default: + mtrCtrl->axisAngle = 0; + break; + } +} + +/** + * @brief 单电阻器和双电阻器的PWM波形设置和采样点设置。 + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_PwmAdcSet(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SampleMode sampleMode = mtrCtrl->sampleMode; + /* 根据采样模式设置占空比. */ + if (sampleMode == DUAL_RESISTORS) { + //三相上开关PWM波的占空比为在两相静止坐标系(albe)中计算。 + SVPWM_Exec(&mtrCtrl->sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvw); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvw, &mtrCtrl->dutyUvw); + } else if (sampleMode == SINGLE_RESISTOR) { + R1SVPWM_Exec(&mtrCtrl->r1Sv, &mtrCtrl->vabRef, &mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + mtrCtrl->setPwmDutyCb(&mtrCtrl->dutyUvwLeft, &mtrCtrl->dutyUvwRight); + /* ADC采样点位置需要根据单个电阻器的相移进行设置。*/ + mtrCtrl->setADCTriggerTimeCb(mtrCtrl->r1Sv.samplePoint[0] * mtrCtrl->aptMaxcntCmp, \ + mtrCtrl->r1Sv.samplePoint[1] * mtrCtrl->aptMaxcntCmp); + } +} + +/** + * @brief 载波中断功能。 + * @param mtrCtrl The motor control handle. + * @retval None. + * 电流环 + */ +void MCS_CarrierProcess(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UvwAxis *currUvw = &mtrCtrl->currUvw; + AlbeAxis *currAlbe = &mtrCtrl->iabFbk; + AlbeAxis *vab = &mtrCtrl->vabRef; + SampleMode sampleMode = mtrCtrl->sampleMode; + /* 采样模式验证 */ + if (sampleMode > SINGLE_RESISTOR || mtrCtrl->setADCTriggerTimeCb == NULL) { + return; + } + /* 参数验证 */ + if (mtrCtrl->setPwmDutyCb == NULL || mtrCtrl->readCurrUvwCb == NULL) { + return; + } + /* 读取三相电流值。 */ + mtrCtrl->readCurrUvwCb(currUvw); + mtrCtrl->getEncAngSpd(&mtrCtrl->encSpeed, &mtrCtrl->encAxisAngle);//读取反馈速度与角度 + /* 同步角度 */ + MCS_SyncCoorAngle(mtrCtrl); + + /* 克拉克变化 UVW->A、B */ + ClarkeCalc(currUvw, currAlbe); + /* 帕克变化 A、B +角度->q、d */ + ParkCalc(currAlbe, mtrCtrl->axisAngle, &mtrCtrl->idqFbk); + + /* 状态机 */ + switch (mtrCtrl->stateMachine) { + case FSM_STARTUP: + case FSM_RUN: + CURRCTRL_Exec(&mtrCtrl->currCtrl, &mtrCtrl->vdqRef, mtrCtrl->smo.spdEst, 0); + //帕克逆变化 ,将d,q轴电流+角度逆变换为α,β。 + InvParkCalc(&mtrCtrl->vdqRef, mtrCtrl->axisAngle, vab); + //单电阻器和双电阻器的PWM波形设置和采样点设置。 + MCS_PwmAdcSet(mtrCtrl); + break; + + case FSM_CAP_CHARGE: + case FSM_CLEAR: + case FSM_IDLE: + break; + + default: + vab->alpha = 0.0f; + vab->beta = 0.0f; + MCS_PwmAdcSet(mtrCtrl); + break; + } +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_inc_enc.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_inc_enc.c new file mode 100644 index 00000000..9769c9b5 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_inc_enc.c @@ -0,0 +1,236 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_incremental_enc.c + * @author MCU Algorithm Team + * @brief This file provides function of QDM module and encoder speed angle calculation. + */ +#include "mcs_inc_enc.h" +#include "crg.h" +#include "debug.h" +#include "mcs_math_const.h" + +#define FILTER_TIME_A 100 /* Unit: clock cycles */ +#define FILTER_TIME_B 100 /* Unit: clock cycles */ +#define FILTER_TIME_Z 100 /* Unit: clock cycles */ +#define ENC_SPEED_BUF_SIZE 10 +#define ENC_HALF_PPR 5000u +#define ENC_MAX_POS 65536u +/** + * @brief QMD Initialization. + * @param qdmInit MCS_QdmInitStru. + * @retval None. + */ +void MCS_QdmInit(MCS_QdmInitStru *qdmInit) +{ + QDM_RegStruct *qdm = qdmInit->qdmAddr; + + HAL_CRG_IpEnableSet(qdmInit->qdmAddr, CRG_ENABLE_VALUE); + + /* Internal counters are not affected by emulator pause CPU */ + qdm->QEMUMODE.BIT.emu_mode = QDM_EMULATION_MODE_RUN_FREE; + + /* Quadrature input decoding mode. Inputs are quadrature encoder A, B, Z phase signals. */ + qdm->QCTRL.BIT.qdu_mode = QDM_QUADRATURE_COUNT; + +/** + * This parameter is valid only when the quadrature count mode is + * used. In other modes, the frequency is multiplied by 2x. + */ + qdm->QCTRL.BIT.qdu_xclk = QDM_4X_RESOLUTION; + + /* xCLK-xDIRCount mode. */ + qdm->QPPUCTRL.BIT.pcnt_mode = QDM_PPU_COUNT_MODE_CLK_DIR; + + /* QDM position counter reset select: overflow reset (upflow, underflow) */ + qdm->QPPUCTRL.BIT.pcnt_rst_mode = QDM_POSITION_RESET_MAX_POS; + + /* QDM initialization position counter mode: disabled */ + qdm->QPPUCTRL.BIT.pcnt_idx_init_mode = QDM_POSITION_INIT_DO_NOTHING; + + /* QDM Index latch mode select: latch at the rising edge of index */ + qdm->QPPUCTRL.BIT.pcnt_idx_lock_mode = QDM_LOCK_RISING_INDEX; + + qdm->QPOSMAX = 0xFFFF; /* QDM Position Count Max */ + + /* ABZ filtering time */ + qdm->QDMAFT.BIT.qdma_ft_level = FILTER_TIME_A; + qdm->QDMBFT.BIT.qdmb_ft_level = FILTER_TIME_B; + qdm->QDMIFT.BIT.qdmi_ft_level = FILTER_TIME_Z; + +/** + * QDM Position count value. When ppu_en is disabled or counting stops after the emulator is + * connected, software can write QPOSCNT. + */ + qdm->QPOSCNT = 0; + + /* QDM Position processing unit PPU enable 1: PPU position counter starts counting */ + qdm->QCTRL.BIT.ppu_en = BASE_CFG_ENABLE; + + /* Enable z-pulse interrupt */ + if (qdmInit->zPlusesIrqFunc != NULL && qdmInit->zPlusesNvic->baseAddr != NULL) { + IRQ_SetPriority(qdmInit->zPlusesNvic->irqNum, qdmInit->zPlusesIrqPrio); + IRQ_Register(qdmInit->zPlusesNvic->irqNum, qdmInit->zPlusesIrqFunc, qdmInit->zPlusesNvic); + DCL_QDM_EnableInterrupt(qdm, QDM_INT_INDEX_EVNT_LATCH); + IRQ_EnableN(qdmInit->zPlusesNvic->irqNum); + } +} + +/** + * @brief Get the Encoder Cnt object. + * @param enc encoder handle. + * @param qdm QDM_RegStruct. + * @retval None. + */ +void MCS_GetEncoderCnt(EncoderHandle *enc, QDM_RegStruct *qdm) +{ + signed short tmpS16; + + enc->cntNow = qdm->QPOSCNT; + /* Get pulse conut in unit period */ + tmpS16 = (signed short)(enc->cntNow - enc->cntPre); + + enc->pulsePos += tmpS16; /* Total number of pulses since power-on. */ + enc->pulseAngle = (unsigned short)qdm->QPOSCNT; + + enc->cntPre = enc->cntNow; +} + +/** + * @brief Get the Elec Angle By Enc object. + * @param enc Encoder handle. + * @retval signed short elecAngle Angle in electronic, S16degree. + */ +void MCS_GetElecAngleByEnc(EncoderHandle *enc) +{ + signed int tmpS32; + + tmpS32 = enc->pulseAngle - enc->pulZCnt; + /* Align electric angle & enc angle */ + tmpS32 += enc->zShift; + /* Limit max value */ + if (tmpS32 > INT16_MAX) { + tmpS32 -= ENC_MAX_POS; + } + /* Limit min value */ + if (tmpS32 < -INT16_MAX) { + tmpS32 += ENC_MAX_POS; + } + while (tmpS32 >= enc->pulsePerElecRound) { + tmpS32 -= enc->pulsePerElecRound; + } + while (tmpS32 < 0) { + tmpS32 += enc->pulsePerElecRound; + } + float tempElecAngle = (signed short)(tmpS32 * enc->pulseToElecAngle); + /* Convert short to float angle type */ + enc->elecAngle = tempElecAngle * DIGITAL_TO_RAD; +} + +/** + * @brief Get the Elec Speed By Enc object. + * @param enc Encoder handle. + * @retval None. + */ +void MCS_GetElecSpeedByEnc(EncoderHandle *enc) +{ + signed int tmpS32; + signed short halfPPR = ENC_HALF_PPR; + unsigned short index = enc->speedBufIndex; + + enc->timeCnt++; + if (enc->timeCnt >= enc->timeNum) { + enc->timeCnt = 0; + } else { + return; + } + + /* Get pulse conut in unit period */ + tmpS32 = enc->pulsePos - enc->speedBuf[index]; + /* Limit max value */ + if (tmpS32 > halfPPR) { + tmpS32 -= ENC_MAX_POS; + } + /* Limit min value */ + if (tmpS32 < -halfPPR) { + tmpS32 += ENC_MAX_POS; + } + /* Convert unit pulse count to Hz */ + enc->elecSpeed = tmpS32 * enc->pulseToHzPu; + enc->speedBuf[index] = enc->pulsePos; + index++; + /* Store current speed for calcule the average */ + if (index >= enc->speedBufSize) { + enc->speedBufIndex = 0; + } else { + enc->speedBufIndex = index; + } +} + +/** + * @brief Clear the historical cache and time count. + * @param enc Encoder handle. + * @retval None. + */ +void MCS_EncoderClear(EncoderHandle *enc) +{ + enc->speedBufIndex = 0; + for (unsigned short i = 0; i < enc->speedBufSize; i++) { + enc->speedBuf[i] = enc->pulsePos; + } + + enc->timeCnt = 0; +} + +/** + * @brief Initialzer of encoder struct handle. + * @param enc Encoder handle. + * @param encParam Encoder and Motor parameter. + * @retval None. + */ +void MCS_EncoderInit(EncoderHandle *enc, MCS_EncInitStru *encParam) +{ + if (encParam->mtrPPMR == 0 || encParam->mtrNp == 0) { + return; + } + + enc->pulsePerMechRound = encParam->mtrPPMR; + enc->pulsePerElecRound = encParam->mtrPPMR / encParam->mtrNp; + enc->zShift = encParam->zShift; + /* Clear count value */ + enc->cntNow = 0; + enc->cntPre = 0; + + enc->pulsePos = 0; + enc->pulseAngle = 0; + enc->elecAngle = 0; + /* Initial speed buffer */ + enc->speedBufSize = ENC_SPEED_BUF_SIZE; /* Max = 10 */ + enc->speedBufIndex = 0; + for (unsigned short i = 0; i < enc->speedBufSize; i++) { + enc->speedBuf[i] = enc->pulsePos; + } + /* Clear time count value */ + enc->timeCnt = 0; + enc->timeNum = encParam->timeNum; + enc->elecSpeed = 0.0f; /* Hz */ + /* Convert unit pulse count to Hz */ + enc->pulseToHzPu = (float)(1.0f / + (enc->pulsePerElecRound * enc->timeNum * enc->speedBufSize * encParam->ctrlPeriod)); + /* Convert unit pulse count to electric angle */ + enc->pulseToElecAngle = (float)(65536.0f / enc->pulsePerElecRound); +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_motor_process.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_motor_process.c new file mode 100644 index 00000000..6626f9a4 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/src/mcs_motor_process.c @@ -0,0 +1,1047 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file mcs_motor_process.c + * @author MCU Algorithm Team + * @brief This file provides motor application. + * @details Single FOC application based on the ECMCU105H/ECBMCU201MPC board + * 1) Motor model is 42JSF630AS-1000. + * 2) Select the pmsm encode qdm 2shunt foc example in the sample column + of chipConfig and click Generate Code. + * 3) It's power supply must be changed to 24V. + */ +#include "main.h" +#include "mcs_user_config.h" +#include "mcs_math.h" +#include "hmi_module.h" +#include "mcs_ctlmode_config.h" +#include "mcs_prot_user.h" +#include "mcs_prot_user_config.h" +#include "mcs_math_const.h" +#include "mcs_motor_process.h" +#include "mcs_chip_config.h" +#include "mcs_inc_enc.h" +#include +#include "debug.h" + + +/*------------------------------- Macro Definition -----------------------------------------------*/ +#define US_PER_MS 1000 +#define ANGLE_RANGE_ABS 65536 +#define ANGLE_360_F 65536.0f /* 0 - 65536 indicates 0 to 360. */ +#define APT_FULL_DUTY 1.0f +#define TEMP_3 3.0f +#define TEMP_15 15.0f +#define TEMP_30 30.0f +#define TEMP_45 45.0f +#define TEMP_60 60.0f +#define TEMP_RES_15 78.327f +#define TEMP_RES_30 36.776f +#define TEMP_RES_45 18.301f +#define TEMP_RES_60 9.607f +#define CNT_10 10 +#define CNT_5000 5000 +#define LEVEL_4 4 +#define MOTOR_START_DELAY 2 +#define ADC_READINIT_DELAY 1 +#define ADC_READINIT_TIMES 20 +#define ADC_TRIMVALUE_MIN 1800.0f +#define ADC_TRIMVALUE_MAX 2200.0f +#define IRQ_QDM0_PRIORITY 7 /* the QDM encoder IRQ priority, highest */ +#define ENC_TIMES_NUM 5 +/*------------------------------- Param Definition -----------------------------------------------*/ +/* Motor parameters. */ +/* Np, Rs, Ld, Lq, Psif, J, Nmax, Currmax, PPMR, zShift */ +static MOTOR_Param g_motorParam = MOTORPARAM_DEFAULTS; +static APT_RegStruct* g_apt[PHASE_MAX_NUM] = {APT_U, APT_V, APT_W}; + +extern __UINT16_TYPE__ last_raw_Angle; +/* QDM */ +typedef struct { + MCS_QdmHandle qdm; +} PeriphHandle; +static PeriphHandle g_periph = {.qdm = {.qdmAddr = QDMBASEADDR, + .zPulsesNvic = {.irqNum = QDMIRQNUM, + .baseAddr = QDMBASEADDR}}}; +/* Motor control handle */ +static MTRCTRL_Handle g_mc = {0}; +/* QDM control handle */ +static EncoderHandle g_enc = {0}; + + + + +/** + * @brief 获取编码器的角度和速度。 + * @param speed 速度指针。 + * @param angle 角度指针。 + * @retval 无。 + */ + +static void GetEncAngSpd(float* speed, float* angle) +{ + MCS_GetEncoderCnt(&g_enc, QDMNUM);// 获取编码器计数值 + // /* 计算电机电角度 -π ~ π */ + MCS_GetElecAngleByEnc(&g_enc); // 根据编码器数据计算电机电角度 + // /* 计算电机速度 */ + MCS_GetElecSpeedByEnc(&g_enc); // 根据编码器数据计算电机速度 + *speed = g_enc.elecSpeed; // 将计算得到的电机速度赋值给传入的速度指针 + *angle = g_enc.elecAngle; // 将计算得到的电机电角度赋值给传入的角度指针 + + + + +} + + +static void ISR_QdmzPulses(void* args) +{ + NvicHandle* qdmHandle = (NvicHandle*)args; // 将传入的参数转换为NvicHandle指针 + /* 清除QDM中断标志 */ + DCL_QDM_ClearInterrupt((QDM_RegStruct*)qdmHandle->baseAddr, QDM_INT_INDEX_EVNT_LATCH); // 清除QDM事件捕获中断标志 + IRQ_ClearN(qdmHandle->irqNum); // 清除中断请求 + + g_enc.pulZCnt = MCS_GetQdmPosCnt(qdmHandle->baseAddr); + g_mc.motorSpinPos++; // 增加电机旋转位置计数 + if (g_mc.encReady == 0) { + /* Z脉冲标志用于确定在初始启动期间IF预设位是否成功使用。 */ + g_mc.encReady = 1; // 如果编码器尚未准备好,设置编码器准备好标志 + } + +} + + + +/* Motor POS loop PID param. */ +static void POSCTRL_InitWrapper(POSCTRL_Handle *posHandle, float ts) +{ + /* Position loop param assignment. */ + PID_Param posPi = { + .kp = POS_KP, + .ki = POS_KI, + .kd = POS_KD, + .ns = POS_NS, + .lowerLim = POS_LOWERLIM, + .upperLim = POS_UPPERLIM, + }; + /* Position loop param init. */ + POSCTRL_Init(posHandle, &posPi, ts); +} + +/* Motor speed loop PI param. */ +static void SPDCTRL_InitWrapper(SPDCTRL_Handle *spdHandle, float ts) +{ + /* Speed loop param assignment. */ + PI_Param spdPi = { + .kp = SPD_KP, + .ki = SPD_KI, + .lowerLim = SPD_LOWERLIM, + .upperLim = SPD_UPPERLIM, + }; + /* Speed loop param init. */ + SPDCTRL_Init(spdHandle, &g_motorParam, spdPi, ts); +} + +/* Motor current Loop PI param. */ +static void CURRCTRL_InitWrapper(CURRCTRL_Handle *currHandle, DqAxis *idqRef, DqAxis *idqFbk, float ts) +{ + /* Axis-D current loop param assignment. */ + PI_Param dCurrPi = { + .kp = CURRDAXIS_KP, + .ki = CURRDAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Axis-Q current loop param assignment. */ + PI_Param qCurrPi = { + .kp = CURRQAXIS_KP, + .ki = CURRQAXIS_KI, + .lowerLim = CURR_LOWERLIM, + .upperLim = CURR_UPPERLIM, + }; + /* Current loop param init. */ + CURRCTRL_Init(currHandle, &g_motorParam, idqRef, idqFbk, dCurrPi, qCurrPi, ts); +} + +/*------------------------------- Function Definition -----------------------------------------------*/ +/** + * @brief 系统标记的初始化器。 + * @param mtrCtrl Motor control struct handle. + * @retval None. + */ +static void TimerTickInit(MTRCTRL_Handle *mtrCtrl) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + mtrCtrl->sysTickCnt = 0; + mtrCtrl->msTickNum = US_PER_MS / SYSTICK_PERIOD_US; + mtrCtrl->capChargeTickNum = (INV_CAP_CHARGE_MS * US_PER_MS / SYSTICK_PERIOD_US); +} + +/** + * @brief Init motor control task. + * @retval None. + */ +static void TSK_Init(void) +{ + g_mc.motorStateFlag = 0; + g_mc.uartHeartDetCnt = 0; + g_mc.uartTimeStamp = 0; + g_mc.stateMachine = FSM_IDLE; + g_mc.currCtrlPeriod = CTRL_CURR_PERIOD; /* 初始化电流控制器 */ + g_mc.aptMaxcntCmp = g_apt0.waveform.timerPeriod; + g_mc.sampleMode = DUAL_RESISTORS; + g_mc.obserType = FOC_OBSERVERTYPE_ENC; /* 启动foc观察模式*/ + g_mc.controlMode = FOC_CONTROLMODE_POS; /* 启动电机控制模式 */ + g_mc.adcCurrCofe = ADC_CURR_COFFI; + g_mc.spdAdjustMode = CUST_SPEED_ADJUST; + g_mc.uartConnectFlag = DISCONNECT; + g_mc.spdCmdHz = 35.0f; /* Motor initialization speed */ + + g_mc.adc0Compensate = ADC0COMPENSATE; /* u相电流初始化adc移位微调值 */ + g_mc.adc1Compensate = ADC1COMPENSATE; /* w相电流初始化adc移位微调值*/ + + IF_Init(&g_mc.ifCtrl, CTRL_IF_CURR_AMP_A, USER_CURR_SLOPE, CTRL_SYSTICK_PERIOD, CTRL_CURR_PERIOD);//IF初始化电流 + RMG_Init(&g_mc.spdRmg, CTRL_SYSTICK_PERIOD, USER_SPD_SLOPE); /* 初始速度斜率*/ + MtrParamInit(&g_mc.mtrParam, g_motorParam); //电机参数初始化 + + TimerTickInit(&g_mc); + SVPWM_Init(&g_mc.sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3); + R1SVPWM_Init(&g_mc.r1Sv, INV_VOLTAGE_BUS * ONE_DIV_SQRT3, SAMPLE_POINT_SHIFT, SAMPLE_WINDOW_DUTY); + //电机速度回路PI参数。 + SPDCTRL_InitWrapper(&g_mc.spdCtrl, CTRL_SYSTICK_PERIOD); + //电机位置回路PI参数。 + POSCTRL_InitWrapper(&g_mc.posCtrl, CTRL_SYSTICK_PERIOD * 5.0f); /* Position loop control period */ + //电机电流回路PI参数。 + CURRCTRL_InitWrapper(&g_mc.currCtrl, &g_mc.idqRef, &g_mc.idqFbk, CTRL_CURR_PERIOD); + + MotorProt_Init(&g_mc.prot); /* 初始化保护状态通用 */ + OCP_Init(&g_mc.prot.ocp, CTRL_CURR_PERIOD); // 启动过电流保护功能。 + OVP_Init(&g_mc.prot.ovp, CTRL_SYSTICK_PERIOD); //启动直流链路电压保护功能。 + LVP_Init(&g_mc.prot.lvp, CTRL_SYSTICK_PERIOD); //启动直流链路电压保护功能。 + OTP_Init(&g_mc.prot.otp, CTRL_SYSTICK_PERIOD); //初始化超温保护功能。 + STP_Init(&g_mc.prot.stall, CTRL_SYSTICK_PERIOD, PROT_STALLING_CURR_AMP_LIMIT, + PROT_STALLING_SPD_LIMIT, PROT_STALLING_TIME_LIMIT);//启动电机失速保护功能。 +} + +/** + * @brief Clear historical values of all controller before start-up. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void ClearBeforeStartup(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + /* The initial angle is 0. */ + mtrCtrl->axisAngle = 0.0f; + mtrCtrl->spdRefHz = 0.0f; + mtrCtrl->motorSpinPos = 0; + /* The initial dq-axis reference current is 0. */ + mtrCtrl->idqRef.d = 0.0f; + mtrCtrl->idqRef.q = 0.0f; + + mtrCtrl->vdqRef.d = 0.0f; + mtrCtrl->vdqRef.q = 0.0f; + /* Clear Duty Cycle Value. The initial duty cycle is 0.5. */ + mtrCtrl->dutyUvwLeft.u = 0.5f; + mtrCtrl->dutyUvwLeft.v = 0.5f; + mtrCtrl->dutyUvwLeft.w = 0.5f; + mtrCtrl->dutyUvwRight.u = 0.5f; + mtrCtrl->dutyUvwRight.v = 0.5f; + mtrCtrl->dutyUvwRight.w = 0.5f; + + mtrCtrl->prot.motorErrStatus.all = 0x00; + + RMG_Clear(&mtrCtrl->spdRmg); /* Clear the history value of speed slope control */ + CURRCTRL_Clear(&mtrCtrl->currCtrl); + IF_Clear(&mtrCtrl->ifCtrl); + SPDCTRL_Clear(&mtrCtrl->spdCtrl); + STARTUP_Clear(&mtrCtrl->startup); + R1SVPWM_Clear(&mtrCtrl->r1Sv); + POSCTRL_Clear(&mtrCtrl->posCtrl); + MCS_EncoderClear(&g_enc); + + OTP_Clear(&mtrCtrl->prot.otp); + OCP_Clear(&mtrCtrl->prot.ocp); + OVP_Clear(&mtrCtrl->prot.ovp); + LVP_Clear(&mtrCtrl->prot.lvp); +} + +/** + * @brief To set the comparison value of the IGBT single-resistance ADC sampling trigger position. + * @param aptx The APT register struct handle. + * @param cntCmpA A Count compare reference of time-base counter. + * @param cntCmpB B Count compare reference of time-base counter. + * @param maxCntCmp Maximum Comparison Value + * @retval None. + */ +static void MCS_SetAdcCompareR1(APT_RegStruct *aptx, unsigned short cntCmpA, + unsigned short cntCmpB, unsigned short maxCntCmp) +{ + unsigned short tmp; + /* Sets the A Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpA), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_A, tmp); + /* Sets the B Count compare reference of time-base counter. */ + tmp = (unsigned short)Clamp((float)(cntCmpB), (float)(maxCntCmp - 1), 1.0f); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_B, tmp); +} + +/** + * @brief Open the three-phase lower pipe. + * @param aptAddr Three-phase APT address pointer. + * @param maxDutyCnt Max duty count. + * @retval None. + */ +static void AptTurnOnLowSidePwm(APT_RegStruct **aptAddr, unsigned short maxDutyCnt) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(maxDutyCnt != 0); + unsigned short dutyCnt; + dutyCnt = (unsigned short)(maxDutyCnt * APT_FULL_DUTY); + /* Open the three-phase lower pipe */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_C, dutyCnt); + DCL_APT_SetCounterCompare(aptx, APT_COMPARE_REFERENCE_D, dutyCnt); + } +} + +/** + * @brief Enable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputEnable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Enable three-phase pwm output */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_UNSET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_UNSET; + } +} + +/** + * @brief Disable three-phase pwm output. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + */ +static void MotorPwmOutputDisable(APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(aptAddr != NULL); + /* Disable three-phase pwm output. */ + for (unsigned int i = 0; i < PHASE_MAX_NUM; i++) { + APT_RegStruct *aptx = (APT_RegStruct *)(aptAddr[i]); + aptx->PG_OUT_FRC.BIT.rg_pga_frc_en = BASE_CFG_SET; + aptx->PG_OUT_FRC.BIT.rg_pgb_frc_en = BASE_CFG_SET; + DCL_APT_ForcePWMOutputLow(aptx); + } +} + +/** + * @brief 构造一个新的mcs启动开关对象。 + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void MCS_StartupSwitch(MTRCTRL_Handle *mtrCtrl) +{ + // 确保传递的电机控制句柄不是NULL + MCS_ASSERT_PARAM(mtrCtrl != NULL); + // 获取启动阶段处理结构体的指针 + STARTUP_Handle *startup = &mtrCtrl->startup; + // 获取dq轴参考值结构体的指针 + DqAxis *idqRef = &mtrCtrl->idqRef; + // 获取目标电流幅值 + float iftargetAmp = mtrCtrl->ifCtrl.targetAmp; + // 获取速度参考值(Hz) + float spdRefHz = mtrCtrl->spdRefHz; + // 根据当前启动阶段执行相应操作 + switch (startup->stage) { + case STARTUP_STAGE_CURR: + if (mtrCtrl->ifCtrl.curAmp >= iftargetAmp) { //IF采样电流大于IF目标电流时。 + /* 阶段转换 */ + // 设置q轴参考电流为目标电流值 + idqRef->q = iftargetAmp; + // 更改启动阶段至速度阶段 + startup->stage = STARTUP_STAGE_SPD; + mtrCtrl->encReady = 0; /* 启动阶段清除Z信号干扰错误 */ + + } else { + /* 增加电流幅值 */ + // 计算并设置新的q轴参考电流 + idqRef->q = IF_CurrAmpCalc(&mtrCtrl->ifCtrl); + // 在此阶段保持速度参考为0 + spdRefHz = 0.0f; + } + break; + + case STARTUP_STAGE_SPD: // 当前处于速度启动阶段 + /* 提高电流频率 */ + // 判断电机是否已经旋转了足够圈数 + if (mtrCtrl->motorSpinPos > 3) { /* 3是If模式下的电机转数 */ + /* 阶段转换 */ + // 转换状态机至运行状态 + mtrCtrl->stateMachine = FSM_RUN; + } else { + /* 速度斜坡生成 */ + // 执行速度斜坡生成函数,并设定一个固定的拖动速度 + spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, 5.0f); /*5.0f为If模式力拖动速度*/ + } + break; + + default: + // 默认情况,不执行任何操作 + break; + } + // 更新电机控制结构中的速度参考值 + mtrCtrl->spdRefHz = spdRefHz; +} + +/** + * @brief Pre-processing of motor status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void MotorStatePerProc(SysStatusReg *statusReg, volatile FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* Get system status */ + if (SysIsError(statusReg)) { + *stateMachine = FSM_FAULT; + } + if (SysGetCmdStop(statusReg)) { + SysCmdStopClr(statusReg); + *stateMachine = FSM_STOP; + } +} + +/** + * @brief Check over current status. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckOverCurrentState(SysStatusReg *statusReg, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check systerm error status */ + if (SysIsError(statusReg) == false) { + *stateMachine = FSM_IDLE; + } +} + +/** + * @brief Check bootstrap capacitor charge time. + * @param mtrCtrl The motor control handle. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckBootstrpCapChargeTime(MTRCTRL_Handle *mtrCtrl, FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + mtrCtrl->sysTickCnt++; + /* check bootstrap capacitor charge time */ + if (mtrCtrl->sysTickCnt == mtrCtrl->capChargeTickNum) { + *stateMachine = FSM_CLEAR; + } +} + + + +/** + * @brief Check systerm cmd start signal. + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @param statusReg System status. + * @param stateMachine Motor Control Status. + * @retval None. + */ +static void CheckSysCmdStart(MTRCTRL_Handle *mtrCtrl, + APT_RegStruct **aptAddr, + SysStatusReg *statusReg, + FsmState *stateMachine) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + MCS_ASSERT_PARAM(statusReg != NULL); + MCS_ASSERT_PARAM(stateMachine != NULL); + /* check start cmd */ + if (SysGetCmdStart(statusReg)) { + SysRunningSet(statusReg); + SysCmdStartClr(statusReg); + mtrCtrl->sysTickCnt = 0; + *stateMachine = FSM_CAP_CHARGE; + /* 为自举电容器充电做准备。 */ + AptTurnOnLowSidePwm(aptAddr, mtrCtrl->aptMaxcntCmp); + /* Out put pwm */ + MotorPwmOutputEnable(aptAddr); + } +} + +/***************************************** + * @brief 系统计时器勾选任务。 + * @param mtrCtrl The motor control handle. + * @param aptAddr Three-phase APT address pointer. + * @retval None. + * 速度环 + * + * + ****************************************/ +static void TSK_SystickIsr(MTRCTRL_Handle *mtrCtrl, APT_RegStruct **aptAddr) +{ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(aptAddr != NULL); + SysStatusReg *statusReg = &mtrCtrl->statusReg; + FsmState *stateMachine = &mtrCtrl->stateMachine; + mtrCtrl->msTickCnt++; + /* 电机状态的预处理。 */ + MotorStatePerProc(statusReg, stateMachine); + /* statemachine */ + switch (*stateMachine) { + case FSM_IDLE: + /*在电机启动前设置smo估计速度*/ + CheckSysCmdStart(mtrCtrl, aptAddr, statusReg, stateMachine); + break; + case FSM_CAP_CHARGE: + /* Bootstrap电容充电定时 */ + CheckBootstrpCapChargeTime(mtrCtrl, stateMachine); + break; + /* 启动前清除参数 */ + case FSM_CLEAR: + ClearBeforeStartup(mtrCtrl); + *stateMachine = FSM_STARTUP; + break; + case FSM_STARTUP: + // 构造一个新的mcs启动开关对象。 + MCS_StartupSwitch(mtrCtrl); + break; + case FSM_RUN: + if (mtrCtrl->controlMode == FOC_CONTROLMODE_SPEED) { /* Speed control mode */ + /* 速度斜坡控制 */ + mtrCtrl->spdRefHz = RMG_Exec(&mtrCtrl->spdRmg, mtrCtrl->spdCmdHz); + } else if (mtrCtrl->controlMode == FOC_CONTROLMODE_POS) { /* Position control mode */ + mtrCtrl->sysTickCnt++; + POSCTRL_SetSlope(&mtrCtrl->posCtrl, mtrCtrl->spdCmdHz);//设置位置斜坡 + /* 200.0是目标位置,用户可以重新定义 */ + // POSCTRL_SetTarget(&mtrCtrl->posCtrl, 0.5 *DOUBLE_PI * g_motorParam.mtrNp);//定位环目标位置设置。 + + float posFbk = POSCTRL_AngleExpand(&mtrCtrl->posCtrl, mtrCtrl->axisAngle); + + if (mtrCtrl->sysTickCnt % 5 == 0) { /* 5是位置环划分系数。*/ + mtrCtrl->spdRefHz = POSCTRL_Exec(&mtrCtrl->posCtrl, mtrCtrl->posCtrl.posTarget, posFbk); + } + } + /* 速度环路控制 */ + mtrCtrl->idqRef.q = SPDCTRL_Exec(&mtrCtrl->spdCtrl, mtrCtrl->spdRefHz, mtrCtrl->encSpeed);//用速度偏差值,求出所需Q轴电流 + + break; + case FSM_STOP: + mtrCtrl->spdRefHz = 0.0f; + MotorPwmOutputDisable(aptAddr); + SysRunningClr(statusReg); + *stateMachine = FSM_IDLE; + break; + case FSM_FAULT: /* Overcurrent state */ + CheckOverCurrentState(statusReg, stateMachine); + break; + default: + break; + } +} + +/** + * @brief Read the ADC initialize bias trim value. + * @param mtrCtrl The motor control handle. + * @retval None. + */ +static void TrimInitAdcShiftValue(MTRCTRL_Handle *mtrCtrl) +{ + float adc0SampleTemp = 0.0f; /* Current bias value for temp store */ + float adc1SampleTemp = 0.0f; + float adc0TempSum = 0.0f; + float adc1TempSum = 0.0f; /* Current bias sum value for 20 times */ + float adcSampleTimes = 0.0f; /* ADC sample times */ + for (int i = 0; i < ADC_READINIT_TIMES; i++) { + adc0SampleTemp = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + adc1SampleTemp = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + BASE_FUNC_DELAY_US(200); /* 200 is delay count, delay 200us triger adc sampling */ + if (adc0SampleTemp > 1000.0f && adc1SampleTemp > 1000.0f) { + adcSampleTimes++; + adc0TempSum += adc0SampleTemp; + adc1TempSum += adc1SampleTemp; + } + } + adc0SampleTemp = adc0TempSum / adcSampleTimes; + adc1SampleTemp = adc1TempSum / adcSampleTimes; + /* Force convert to float */ + mtrCtrl->adc0Compensate = (float) adc0SampleTemp; + mtrCtrl->adc1Compensate = (float) adc1SampleTemp; + /* The normal value scope: 1800 < adc0Compensate < 2200 */ + if(g_mc.adc0Compensate < ADC_TRIMVALUE_MIN || g_mc.adc0Compensate > ADC_TRIMVALUE_MAX \ + || g_mc.adc1Compensate < ADC_TRIMVALUE_MIN || g_mc.adc1Compensate > ADC_TRIMVALUE_MAX) { + DBG_PRINTF("ADC trim value error,please reset!"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + } + adcSampleTimes = 0; + adc0TempSum = 0; + adc1TempSum = 0; +} + +/** + * @brief Read the ADC current sampling value. + * @param CurrUvw Three-phase current. + * @retval None. + */ +static void ReadCurrUvw(UvwAxis *CurrUvw) +{ + MCS_ASSERT_PARAM(CurrUvw != NULL); + float adc0 = (float)HAL_ADC_GetConvResult(&ADCU_HANDLE, ADCUSOCNUM); + float adc1 = (float)HAL_ADC_GetConvResult(&ADCW_HANDLE, ADCWSOCNUM); + /* Convert adc sample value to current value */ + CurrUvw->u = -(adc0 - g_mc.adc0Compensate) * g_mc.adcCurrCofe; + CurrUvw->w = -(adc1 - g_mc.adc1Compensate) * g_mc.adcCurrCofe; + CurrUvw->v = -CurrUvw->u - CurrUvw->w; +} + +/** + * @brief Setting the APT Output Duty Cycle. + * @param aptx APT register base address. + * @param leftDuty Left duty cycle. + * @param rightDuty Right duty cycle. + * @retval None. + */ +static void SetPwmDuty(APT_Handle *aptx, float leftDuty, float rightDuty) +{ + MCS_ASSERT_PARAM(aptx != NULL); + MCS_ASSERT_PARAM(leftDuty > 0); + MCS_ASSERT_PARAM(rightDuty > 0); + unsigned short maxPeriodCnt = aptx->waveform.timerPeriod; + unsigned short cntCmpLeftEdge = (unsigned short)(leftDuty * maxPeriodCnt); + unsigned short cntCmpRightEdge = (unsigned short)(rightDuty * maxPeriodCnt); + /* avoid overflowing */ + cntCmpLeftEdge = (cntCmpLeftEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpLeftEdge; + cntCmpRightEdge = (cntCmpRightEdge > maxPeriodCnt) ? maxPeriodCnt : cntCmpRightEdge; + HAL_APT_SetPWMDuty(aptx, cntCmpLeftEdge, cntCmpRightEdge); +} + +/** + * @brief Duty Cycle Setting. + * @param dutyUvwLeft Three-phase left duty cycle. + * @param dutyUvwRight Three-phase right duty cycle. + * @retval None. + */ +static void SetPwmDutyCp(UvwAxis *dutyUvwLeft, UvwAxis *dutyUvwRight) +{ + MCS_ASSERT_PARAM(dutyUvwLeft != NULL); + MCS_ASSERT_PARAM(dutyUvwRight != NULL); + /* Setting the Three-Phase Duty Cycle */ + SetPwmDuty(&g_apt0, dutyUvwLeft->u, dutyUvwRight->u); + SetPwmDuty(&g_apt1, dutyUvwLeft->v, dutyUvwRight->v); + SetPwmDuty(&g_apt2, dutyUvwLeft->w, dutyUvwRight->w); +} + +/** + * @brief To set the ADC sampling trigger comparison value. + * @param cntCmpSOCA Soca Compare Count Value. + * @param cntCmpSOCB Socb Compare Count Value. + * @retval None. + */ +static void SetADCTriggerTime(unsigned short cntCmpSOCA, unsigned short cntCmpSOCB) +{ + MCS_SetAdcCompareR1(g_apt[PHASE_U], cntCmpSOCA, cntCmpSOCB, g_mc.aptMaxcntCmp); +} + +/** + * @brief Temprature table. + * @param tempResisValue Temperature sensor resistance. + * @retval None. + */ +static float TempTable(float tempResisValue) +{ + float boardTemp = 0.0f; + /* Temperatures between 15 and 30. */ + if (tempResisValue > TEMP_RES_30 && tempResisValue <= TEMP_RES_15) { + boardTemp = TEMP_15 + (TEMP_30 - TEMP_15) * (TEMP_RES_15 - tempResisValue) / (TEMP_RES_15 - TEMP_RES_30); + } else if (tempResisValue > TEMP_RES_45 && tempResisValue <= TEMP_RES_30) { /* Temperature between 30 and 45. */ + boardTemp = TEMP_30 + (TEMP_45 - TEMP_30) * (TEMP_RES_30 - tempResisValue) / (TEMP_RES_30 - TEMP_RES_45); + } else if (tempResisValue > TEMP_RES_60 && tempResisValue <= TEMP_RES_45) { /* Temperature between 45 and 50. */ + boardTemp = TEMP_45 + (TEMP_60 - TEMP_45) * (TEMP_RES_45 - tempResisValue) / (TEMP_RES_45 - TEMP_RES_60); + } else if (tempResisValue <= TEMP_RES_60) { + boardTemp = TEMP_60; /* If temperature is over 60, set temperature as 60. */ + } else if (tempResisValue >= TEMP_RES_15) { + boardTemp = TEMP_15; /* If temperature is lower 15, set temperature as 15. */ + } + return boardTemp; +} + +/** + * @brief Read power board temperature and udc. + * @retval None. + */ +static void ReadBoardTempAndUdc(void) +{ + HAL_ADC_SoftTrigSample(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + HAL_ADC_SoftTrigSample(&ADCUDC_HANDLE, ADCUDCSOCNUM); + BASE_FUNC_DELAY_US(CNT_10); /* Delay 10 us. */ + /* Force convert to float type. */ + float resisAdcValue = (float)HAL_ADC_GetConvResult(&ADCRESIS_HANDLE, ADCRESISSOCNUM); + /* 10 / (x + 10) * 3.3 = resisAdcValue / 4096 * 3.3, x is resisValue, 10kohm is resistor divider value. */ + float resisValue = (4096.0f * 10.0f - 10.0f * resisAdcValue) / resisAdcValue; + g_mc.powerBoardTemp = TempTable(resisValue); + g_mc.udc = ((float)HAL_ADC_GetConvResult(&ADCUDC_HANDLE, ADCUDCSOCNUM)) * ADC_UDC_COFFI; +} + +/** + * @brief 执行异常反馈速度保护动作。 + * @retval None. + */ +static void SpdFbkErrorProt_Exec(void) +{ + if (g_mc.prot.motorErrStatus.Bit.motorStalling == 0 && + g_mc.prot.motorErrStatus.Bit.overVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.lowerVoltErr == 0 && + g_mc.prot.motorErrStatus.Bit.overIpmTempErr == 0 && + g_mc.prot.motorErrStatus.Bit.overCurrErr == 0) { + g_mc.prot.motorErrStatus.Bit.revRotErr = 1; + /* If revRotErr, execute protect motion. */ + ProtSpo_Exec(g_apt); + } +} +/** + * @brief Check abnormal feedback speed. + * @retval None. + */ +static void CheckSpdFbkStatus(void) +{ + static short errorSpdStatus = 0; + static short errorDeltaSpdStatus = 0; + /* Detect the nan value. */ + if (isnan(g_mc.encSpeed) || isnan(g_mc.idqRef.q)) { + errorSpdStatus++; + } else { + errorSpdStatus = 0; + } + if (g_mc.stateMachine == FSM_RUN) { + /* 检测反馈速度异常。定义10为速度误差值,0.5为当前误差值*/ + if (Abs(g_mc.spdRefHz - g_mc.encSpeed) >= CNT_10 && g_mc.idqRef.q <= 0.5f) { + errorDeltaSpdStatus++; + } + } + /*如果计数超过5000次,则执行保护动作. */ + if (errorSpdStatus >= CNT_5000 || errorDeltaSpdStatus >= CNT_5000) { + errorSpdStatus = 0; + errorDeltaSpdStatus = 0; + SpdFbkErrorProt_Exec(); + } +} +/** + * @brief Check Potentiometer Value callback function. + * @param param The TIMER_Handle. + * @retval None. + */ +void CheckPotentiometerValueCallback(void *param) +{ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + static float potentiomitorAdcValue = 0.0f; + static float spdCmdHz = 0; + static float spdCmdHzLast = 35.0f; /* 35.0 is spdCmdHzLast init value */ + HAL_ADC_SoftTrigSample(&ADCPTT_HANDLE, ADCPTTSOCNUM); + BASE_FUNC_DELAY_US(10); /* Delay 10 us. */ + potentiomitorAdcValue = (float)HAL_ADC_GetConvResult(&ADCPTT_HANDLE, ADCPTTSOCNUM); + /* 4045.0 is adc sample max value of potentiomitor, convert max spd to 200.0Hz */ + spdCmdHz = potentiomitorAdcValue / 4045.0f * USER_MAX_SPD_HZ;//电位器控制速度 + // spdCmdHz=uart_spdcmd;//串口控制速度 + + POSCTRL_SetTarget(&g_mc.posCtrl,uart_poscmd * g_motorParam.mtrNp);//串口控制位置转动 + + // POSCTRL_SetTarget(&g_mc.posCtrl,potentiomitorAdcValue / 4045.0f * 6.28 * g_motorParam.mtrNp);//电位器控制电机位置转动 + + + if (Abs(spdCmdHzLast - spdCmdHz) < 1.0f) { /* Ignore changes less than 1. */ + return; + } + spdCmdHzLast = spdCmdHz; + if (spdCmdHz < USER_MIN_SPD_HZ) { /* USER_MIN_SPD_HZ is spdCmdHz lower limit */ + spdCmdHz = USER_MIN_SPD_HZ; /* USER_MIN_SPD_HZ is spdCmdHz lower limit */ + } + if (spdCmdHz > g_mc.mtrParam.maxElecSpd) { /* spdCmdHz upper limit */ + spdCmdHz = g_mc.mtrParam.maxElecSpd; /* spdCmdHz upper limit */ + } + if (g_mc.spdAdjustMode == CUST_SPEED_ADJUST) { + g_mc.spdCmdHz = spdCmdHz; + } +} + +/** + * @brief 用于电机状态机回叫功能的系统定时器ISR。 + * @param param The systick timer handle. + * @retval None. + * + */ +void MotorStatemachineCallBack(void *param) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(param != NULL); + BASE_FUNC_UNUSED(param); + /* 读取电源板温度和电压。*/ + ReadBoardTempAndUdc(); + /* 电机错误状态检查. */ + TSK_SystickIsr(&g_mc, g_apt); + if (g_mc.prot.motorErrStatus.all == 0) { + /* 电机错误状态检查 */ + CheckSpdFbkStatus(); + /* 电机失速检测。 */ + STP_Det_ByCurrSpd(&g_mc.prot.stall, &g_mc.prot.motorErrStatus, g_mc.encSpeed, g_mc.idqFbk); + STP_Exec(&g_mc.prot.motorErrStatus, g_apt); + } + /* 电机过电压检测。 */ + OVP_Det(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + OVP_Exec(&g_mc.prot.ovp, &g_mc.spdRefHz, g_apt); + OVP_Recy(&g_mc.prot.ovp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* 电机低电压检测. */ + LVP_Det(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + LVP_Exec(&g_mc.prot.lvp, &g_mc.spdRefHz, g_apt); + LVP_Recy(&g_mc.prot.lvp, &g_mc.prot.motorErrStatus, g_mc.udc); + /* 电源板超温检测. */ + OTP_Det(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + OTP_Exec(&g_mc.prot.otp, &g_mc.spdRefHz, g_apt); + OTP_Recy(&g_mc.prot.otp, &g_mc.prot.motorErrStatus, OTP_IPM_ERR_BIT, g_mc.powerBoardTemp); + + /* 如果保护级别==4,则将电机状态设置为停止。 */ + if (g_mc.prot.ovp.protLevel == LEVEL_4 || g_mc.prot.lvp.protLevel == LEVEL_4 \ + || g_mc.prot.otp.protLevel == LEVEL_4) { + SysCmdStopSet(&g_mc.statusReg); + } +} + +/** + * @brief The carrier ISR wrapper function. + * @param aptHandle The APT handle. + * @retval None. + * + * 载波中断函数, + */ +void MotorCarrierProcessCallback(void *aptHandle) +{ + MCS_ASSERT_PARAM(aptHandle != NULL); + BASE_FUNC_UNUSED(aptHandle); + /* the carrierprocess of motor */ + MCS_CarrierProcess(&g_mc); + /* Over current protect */ + if (g_mc.stateMachine == FSM_RUN || g_mc.stateMachine == FSM_STARTUP) { + OCP_Det(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus, g_mc.idqFbk); + OCP_Exec(&g_mc.prot.ocp, &g_mc.idqFbk, g_apt); /* Execute over current protect motion */ + if (g_mc.prot.ocp.protLevel < LEVEL_4) { + OCP_Recy(&g_mc.prot.ocp, &g_mc.prot.motorErrStatus); + } + } +} + +/** + * @brief Event interrupt callback function of APT module. + * @param para APT module handle. + * @retval None. + */ +void MotorSysErrCallback(void *para) +{ + MCS_ASSERT_PARAM(para != NULL); + APT_Handle *handle = (APT_Handle *)para; + /* The IPM overcurrent triggers and disables the three-phase PWM output. */ + MotorPwmOutputDisable(g_apt); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_U], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_V], APT_OC_COMBINE_EVENT_A1); + DCL_APT_ClearOutCtrlEventFlag((APT_RegStruct *)g_apt[PHASE_W], APT_OC_COMBINE_EVENT_A1); + /* Status setting error */ + SysErrorSet(&g_mc.statusReg); + DBG_PRINTF("APT error! \r\n"); + HAL_GPIO_SetValue(&LED2_HANDLE, LED2_PIN, GPIO_LOW_LEVEL); + BASE_FUNC_UNUSED(handle); +} + +/** + * @brief 初始化电机控制器的数据结构。 + * @retval None. + */ +static void InitSoftware(void) +{ + /* 正在初始化电机控制参数 */ + TSK_Init(); + /* Read phase-uvw current */ + g_mc.readCurrUvwCb = ReadCurrUvw; + g_mc.setPwmDutyCb = SetPwmDutyCp; + g_mc.setADCTriggerTimeCb = SetADCTriggerTime; + g_mc.encHandle = &g_enc; + + MCS_EncInitStru encMotorParam; + EncoderHandle* enc = &g_enc; + encMotorParam.mtrNp = g_motorParam.mtrNp; + encMotorParam.mtrPPMR = g_motorParam.mtrPPMR; + encMotorParam.zShift = g_motorParam.zShift; + encMotorParam.ctrlPeriod = CTRL_CURR_PERIOD; + encMotorParam.timeNum = ENC_TIMES_NUM; + MCS_EncoderInit(enc, &encMotorParam); /* encoder Initializing Parameter Configurations. */ + + /* MCU peripheral configuration function used for initial motor control. */ + g_mc.getEncAngSpd = GetEncAngSpd; /* Callback function for obtaining the encoder speed angle. */ +} + +/** + * @brief Config the master APT. + * @param aptx The master APT handle. + * @retval None. + */ +static void AptMasterSet(APT_Handle *aptx) +{ + MCS_ASSERT_PARAM(aptx != NULL); + /* Config the master APT. */ + HAL_APT_MasterSyncInit(aptx, APT_SYNC_OUT_ON_CNTR_ZERO); +} + +/** + * @brief Config the slave APT. + * @param aptx The slave APT handle. + * @retval None. + */ +static void AptSalveSet(APT_Handle *aptx) +{ + MCS_ASSERT_PARAM(aptx != NULL); + APT_SlaveSyncIn slave; + /* Config the slave APT. */ + slave.divPhase = 0; + slave.cntPhase = 0; + slave.syncCntMode = APT_COUNT_MODE_AFTER_SYNC_UP; + slave.syncInSrc = APT_SYNC_IN_SRC; + slave.cntrSyncSrc = APT_CNTR_SYNC_SRC_SYNCIN; + HAL_APT_SlaveSyncInit(aptx, &slave); +} +/** + * @brief Configuring Master and Slave APTs. + * @retval None. + */ +static void AptMasterSalveSet(void) +{ + /* motor fan APT master/slave synchronization */ + AptMasterSet(&g_apt0); + AptSalveSet(&g_apt1); + AptSalveSet(&g_apt2); +} + +/** + * @brief Config the KEY func. + * @param handle The GPIO handle. + * @retval None. + */ +static KEY_State Key_StateRead(GPIO_Handle *handle) +{ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + BASE_FUNC_DELAY_MS(30); /* delay 30ms for deshake */ + if (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + while (HAL_GPIO_GetPinValue(handle, handle->pins) == 0) { + } + return KEY_DOWN; + } + } + return KEY_UP; +} + + +/** + * @brief Control motor start and stop state by key func. + * @param param The GPIO handle. + * @retval None. + */ +void MotorStartStopKeyCallback(void *param) +{ + GPIO_Handle *handle = (GPIO_Handle *)param; + if (Key_StateRead(handle) == KEY_DOWN) { + if (g_mc.motorStateFlag == 0) { /* start motor */ + g_mc.motorStateFlag = 1; + SysCmdStartSet(&g_mc.statusReg); + } else if (g_mc.motorStateFlag == 1) { /* stop motor */ + g_mc.motorStateFlag = 0; + SysCmdStopSet(&g_mc.statusReg); + } + } +} + +/** + * @brief 用户应用程序的主入口函数。 + * @retval BSP_OK 返回状态。 + */ +int MotorMainProcess(void) +{ + unsigned int tickNum1Ms = 2; /* 定义1毫秒的计时器滴答数 */ + static unsigned int tickCnt1Ms = 0; /* 静态变量,用于记录1毫秒滴答计数 */ + unsigned int tickNum500Ms = 1000; /* 定义500毫秒的计时器滴答数 */ + static unsigned int tickCnt500Ms = 0; /* 静态变量,用于记录500毫秒滴答计数 */ + + SystemInit(); /* 系统初始化 */ + HMI_Init(); /* 初始化串口中断,用于人机交互接口 */ + HAL_TIMER_Start(&g_timer0); /* 启动定时器0 */ + HAL_TIMER_Start(&g_timer1); /* 启动定时器1 */ + + + AptMasterSalveSet(); /* 设置主从设备 */ + /* 在启动前禁用PWM输出。 */ + MotorPwmOutputDisable(g_apt); /* 禁用PWM输出 */ + /* 软件初始化。 */ + InitSoftware(); /* 初始化软件相关设置 电机参数初始化*/ + + /* QDM使用算法驱动的速度和角度采集 */ + static MCS_QdmInitStru qdmInit; /* QDM初始化结构体 */ + qdmInit.qdmAddr = g_periph.qdm.qdmAddr; /* 设置QDM地址 */ + + qdmInit.zPlusesIrqFunc = ISR_QdmzPulses; /* 设置QDM零脉冲中断服务函数 */ + + qdmInit.zPlusesNvic = &g_periph.qdm.zPulsesNvic; /* 设置QDM零脉冲中断控制器 */ + qdmInit.zPlusesIrqPrio = IRQ_QDM0_PRIORITY; /* 设置QDM零脉冲中断优先级 */ + MCS_QdmInit(&qdmInit); /* 初始化QDM,必须在使能载波中断之前执行。 */ + + /* 启动PWM时钟。 */ + HAL_APT_StartModule(RUN_APT0 | RUN_APT1 | RUN_APT2); /* 启动APT模块 */ + /* 系统定时器时钟延迟。 */ + BASE_FUNC_DELAY_MS(ADC_READINIT_DELAY); /* 延迟,等待ADC初始化 */ + TrimInitAdcShiftValue(&g_mc); /* 初始化ADC移位值 */ + BASE_FUNC_DELAY_MS(MOTOR_START_DELAY); /* 延迟,等待电机启动 */ + while (1) { + + /* 循环发送数据到主机 */ + HMI_Process_Tx(&g_mc); /* 处理人机交互接口的发送数据 */ + if (g_mc.msTickCnt - tickCnt1Ms >= tickNum1Ms) { /* 检查是否达到1毫秒的计时 */ + tickCnt1Ms = g_mc.msTickCnt; /* 更新1毫秒滴答计数 */ + /* 用户代码1毫秒事件 */ + HMI_Process_Rx(&g_mc); /* 处理人机交互接口的接收数据 */ + /* 用户代码1毫秒事件 */ + } + + if (g_mc.msTickCnt - tickCnt500Ms >= tickNum500Ms) { /* 检查是否达到500毫秒的计时 */ + if (SysIsError(&g_mc.statusReg) != true) { /* 检查系统是否出现错误 */ + /* 如果系统状态正常,则切换LED灯的状态。 */ + HAL_GPIO_TogglePin(&LED1_HANDLE, LED1_PIN); /* 切换LED灯的状态 */ + } + tickCnt500Ms = g_mc.msTickCnt; /* 更新500毫秒滴答计数 */ + } + } + return 0; +} diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/cust_process.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/cust_process.c new file mode 100644 index 00000000..69f95195 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/cust_process.c @@ -0,0 +1,639 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of cust process interface. + */ + +#include "cust_process.h" +#include "mcs_ctlmode_config.h" +#include "mcs_math_const.h" +#include "mcs_user_config.h" +#include "mcs_assert.h" +#include "main.h" +#include "uart_module.h" +#include "mcs_mtr_param.h" +#include "mcs_inc_enc.h" + +/* Macro definitions --------------------------------------------------------------------------- */ +/* Constant value. */ +#define CONST_VALUE_60 60.0f /* Constant value 60. */ +#define CONST_VALUE_DIV_1000 0.001f /* Constant value 1/1000. */ + +/* Data array index. */ +#define DATA_SEGMENT_ONE 0 /* First element of the data segment */ +#define DATA_SEGMENT_TWO 1 /* 数据段的第二个元素 */ +#define DATA_SEGMENT_THREE 2 /* Third element of the data segment */ +#define DATA_SEGMENT_FOUR 3 /* Fourth element of the data segment */ +#define CUSTACKCODELEN 10 /* Ack code length */ + +/* Command code. */ +#define SET_PID_KP 0x01 /* Set Pid Kp Command Params */ +#define SET_PID_KI 0x02 /* Set Pid Ki Command Params */ +#define SET_PID_LIMIT 0x03 /* Set Pid limit Command Params */ + +#define SET_ENC_MTRPPMR 0x01 /* Set encoder lines */ +#define SET_ENC_ZSHIFT 0x02 /* Set encoder zero point shift */ + +#define SET_SPD_COMMAND_HZ 0x01 /* Set Target Speed Command Params */ +#define SET_SPD_RMG_SLOPE 0x02 /* Set Speed Slope Command Params */ + +#define SET_MAX_ELEC_SPD 0x01 /* Set Max Motor Speed Command Params */ +#define SET_MOTOR_NUM_OF_PAIRS 0x02 /* Set Motor Command Params */ + +#define SET_MOTOR_RES_OF_STATOR 0x01 /* Set Motor Res Command Params */ +#define SET_MOTOR_DAXIS_INDUCTANCE 0x02 /* Set Motor Daxis Inductance Command Params */ +#define SET_MOTOR_QAXIS_INDUCTANCE 0x03 /* Set Motor Qaxis Inductance Command Params */ + +#define SET_SVPWM_VOLTAGE_PER_UNIT 0x01 /* Set Svpwm Voltage Params */ +#define SET_ADC_CURRENT_SAMPLE_COFE 0x02 /* Set Adc coffe Params */ +#define SET_CURRENT_LOOP_CONTROL_PERIOD 0x03 /* Set Current loop period Command Params */ + +#define SET_IF_TARGET_CURRENT_VALUE 0x01 /* Set If Target Params */ +#define SET_INCREMENT_OF_IF_CURRENT 0x02 /* Set If Step Command Params */ +#define SET_SPEED_RING_BEGIN_SPEED 0x03 /* Set If to Smo Start Speed Command Params */ + +static unsigned char ackCode = 0; +static unsigned char g_uartTxBuf[CUSTACKCODELEN] = {0}; + +/** + * @brief Set observer type. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverType(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + if (funcCode == FOC_OBSERVERTYPE_ENC) { + ackCode = 0X03; + mtrCtrl->obserType = FOC_OBSERVERTYPE_ENC; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->obserType); + } +} + +/** + * @brief Set pid parameter ack code. + * @param funcCode Received data funccode. + */ +static unsigned char SetPidAckCode(int funcCode) +{ + switch (funcCode) { + /* Set current loop D-Axis PID parameter ack code. */ + case FOC_CURDAXISPID_PARAMS: + ackCode = 0xE0; + break; + /* Set current loop Q-Axis PID parameter ack code. */ + case FOC_CURQAXISPID_PARAMS: + ackCode = 0xE3; + break; + /* Set speed loop PID parameter ack code. */ + case FOC_SPDPID_PARAMS: + ackCode = 0xE6; + break; + default: + break; + } + return ackCode; +} + +/** + * @brief Set pid parameters. + * @param pidHandle The pid control handle. + * @param rxData Receive buffer + */ +static void SetPidParams(PID_Handle *pidHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + switch (cmdCode) { + case SET_PID_KP: /* Set the P parameter. */ + PID_SetKp(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, ackCode + SET_PID_KP, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_KI: /* Set the I parameter. */ + PID_SetKi(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, ackCode + SET_PID_KI, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_PID_LIMIT: /* Set the pid limit. */ + PID_SetLimit(pidHandle, rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = SetPidAckCode(funcCode); + CUST_AckCode(g_uartTxBuf, ackCode + SET_PID_LIMIT, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor pid parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorPidParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_CURDAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.dAxisPi, rxData); /* Set Curr loop Daxis pid params */ + } else if (funcCode == FOC_CURQAXISPID_PARAMS) { + SetPidParams(&mtrCtrl->currCtrl.qAxisPi, rxData); /* Set Curr loop Qaxis pid params */ + mtrCtrl->currCtrl.dAxisPi.upperLimit = mtrCtrl->currCtrl.qAxisPi.upperLimit; + mtrCtrl->currCtrl.dAxisPi.lowerLimit = mtrCtrl->currCtrl.qAxisPi.lowerLimit; + } else if (funcCode == FOC_SPDPID_PARAMS) { + SetPidParams(&mtrCtrl->spdCtrl.spdPi, rxData); /* Set speed loop params */ + } +} + +/** + * @brief Set encoder observer parameters. + * @param encHandle The observer control handle. + * @param rxData Receive buffer + */ +static void SetObserverEncParams(EncoderHandle *encHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + switch (cmdCode) { + case SET_ENC_MTRPPMR: /* Set encoder MTRPPMR. */ + encHandle->pulsePerMechRound = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0D; + CUST_AckCode(g_uartTxBuf, ackCode, encHandle->pulsePerMechRound); + break; + case SET_ENC_ZSHIFT: /* Set encoder zero shift. */ + encHandle->zShift = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X0E; + CUST_AckCode(g_uartTxBuf, ackCode, encHandle->zShift); + break; + default: + break; + } +} + +/** + * @brief 设置观察者参数。 + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetObserverParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + if (funcCode == FOC_OBSERVERTYPE_ENC) { + SetObserverEncParams(mtrCtrl->encHandle, rxData); + mtrCtrl->encHandle->pulsePerElecRound = mtrCtrl->encHandle->pulsePerMechRound / mtrCtrl->mtrParam.mtrNp; + } +} + +/** + * @brief 设置电机速度和速度斜率。 + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorSpdAndSlope(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SPD_COMMAND_HZ: /* Set target speed(hz). */ + mtrCtrl->spdCmdHz = rxData->data[DATA_SEGMENT_THREE].typeF * mtrCtrl->mtrParam.mtrNp / CONST_VALUE_60; + /* Judgement the value > 0.00001, make sure denominator != 0 */ + if (rxData->data[DATA_SEGMENT_FOUR].typeF > 0.00001f) { + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_FOUR].typeF * CTRL_SYSTICK_PERIOD; + } + ackCode = 0X16; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->spdCmdHz); + break; + case SET_SPD_RMG_SLOPE: /* Set speed slope. */ + mtrCtrl->spdRmg.delta = mtrCtrl->spdCmdHz / rxData->data[DATA_SEGMENT_THREE].typeF * CTRL_SYSTICK_PERIOD; + ackCode = 0X17; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor base parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorBaseParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MAX_ELEC_SPD: /* Set max electric speed. */ + mtrParamHandle->maxElecSpd = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrParamHandle->mtrNp; + ackCode = 0X18; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_MOTOR_NUM_OF_PAIRS: /* Set the number of motor pole pairs. */ + mtrParamHandle->mtrNp = (unsigned short)(rxData->data[DATA_SEGMENT_THREE].typeF); + ackCode = 0X19; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrParamHandle->mtrNp); + break; + default: + break; + } +} + +/** + * @brief Set motor special parameters. + * @param mtrParamHandle The motor parameters handle. + * @param rxData Receive buffer + */ +static void SetMotorSpecialParams(MOTOR_Param *mtrParamHandle, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_MOTOR_RES_OF_STATOR: /* Set the resistor of stator. */ + mtrParamHandle->mtrRs = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1A; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrRs); + break; + case SET_MOTOR_DAXIS_INDUCTANCE: /* Set the d axis inductance. */ + mtrParamHandle->mtrLd = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1B; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLd); + break; + case SET_MOTOR_QAXIS_INDUCTANCE: /* Set the q axis inductance. */ + mtrParamHandle->mtrLq = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1C; + CUST_AckCode(g_uartTxBuf, ackCode, mtrParamHandle->mtrLq); + break; + default: + ackCode = 0X77; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + break; + } +} + +/** + * @brief Set motor board parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetMotorBoardParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_SVPWM_VOLTAGE_PER_UNIT: /* Set svpwm voltage per unit. */ + mtrCtrl->sv.voltPu = rxData->data[DATA_SEGMENT_THREE].typeF * ONE_DIV_SQRT3; + mtrCtrl->currCtrl.outLimit = mtrCtrl->sv.voltPu * ONE_DIV_SQRT3; + ackCode = 0X1D; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + case SET_ADC_CURRENT_SAMPLE_COFE: /* Set adc current sample cofeature. */ + mtrCtrl->adcCurrCofe = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X1E; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->adcCurrCofe); + break; + case SET_CURRENT_LOOP_CONTROL_PERIOD: /* Set current loop control period. */ + mtrCtrl->currCtrlPeriod = 1 / rxData->data[DATA_SEGMENT_THREE].typeF * CONST_VALUE_DIV_1000; + ackCode = 0X1F; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set motor parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetMotorParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == MOTOR_PARAMS_BASE) { + SetMotorBaseParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_SPECIAL) { + SetMotorSpecialParams(&mtrCtrl->mtrParam, rxData); + } else if (funcCode == MOTOR_PARAMS_BOARD) { + SetMotorBoardParams(mtrCtrl, rxData); + } +} + +/** + * @brief Motor start. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStart(MTRCTRL_Handle *mtrCtrl) +{ + if (mtrCtrl->stateMachine != FSM_RUN) { + SysCmdStartSet(&mtrCtrl->statusReg); /* start motor. */ + mtrCtrl->motorStateFlag = 1; + ackCode = 0X24; /* send ackcode to host. */ + CUST_AckCode(g_uartTxBuf, ackCode, 1); + } +} + +/** + * @brief Motor stop. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorStop(MTRCTRL_Handle *mtrCtrl) +{ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + ackCode = 0X25; + CUST_AckCode(g_uartTxBuf, ackCode, 0); +} + +/** + * @brief Motor state reset. + * @param mtrCtrl The motor control handle. + */ +static void CMDCODE_MotorReset(MTRCTRL_Handle *mtrCtrl) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_SoftReset(); +} + +/** + * @brief Set IF-Startup parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void SetStartupIFParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get command code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + + switch (cmdCode) { + case SET_IF_TARGET_CURRENT_VALUE: /* Set I/F start up target current value. */ + mtrCtrl->ifCtrl.targetAmp = rxData->data[DATA_SEGMENT_THREE].typeF; + ackCode = 0X26; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.targetAmp); + break; + case SET_INCREMENT_OF_IF_CURRENT: /* Set increment of I/F start up current. */ + mtrCtrl->ifCtrl.stepAmp = mtrCtrl->ifCtrl.targetAmp / rxData->data[DATA_SEGMENT_THREE].typeF * + CTRL_SYSTICK_PERIOD; + ackCode = 0X27; + CUST_AckCode(g_uartTxBuf, ackCode, mtrCtrl->ifCtrl.stepAmp); + break; + case SET_SPEED_RING_BEGIN_SPEED: /* Set speed ring begin speed. */ + mtrCtrl->startup.spdBegin = rxData->data[DATA_SEGMENT_THREE].typeF / + CONST_VALUE_60 * mtrCtrl->mtrParam.mtrNp; + ackCode = 0X28; + CUST_AckCode(g_uartTxBuf, ackCode, rxData->data[DATA_SEGMENT_THREE].typeF); + break; + default: + break; + } +} + +/** + * @brief Set start up parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetStartupParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + + if (funcCode == FOC_STARTUP_IF) { + SetStartupIFParams(mtrCtrl, rxData); + } +} + +/** + * @brief Set adjust speed mode. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_SetAdjustSpdMode(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + /* Get function code. */ + int funcCode = (int)(rxData->data[DATA_SEGMENT_ONE].typeF); + /* Get commond code. */ + int cmdCode = (int)(rxData->data[DATA_SEGMENT_TWO].typeF); + if (funcCode == HOST_SPEED_ADJUST) { + mtrCtrl->spdAdjustMode = HOST_SPEED_ADJUST; + /* Uart connect success. */ + mtrCtrl->uartConnectFlag = CONNECTING; + ackCode = 0X2A; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + } else if (funcCode == CUST_SPEED_ADJUST) { + if (cmdCode == 1) { /* If uart connection disconnected & stop motor commond. */ + SysCmdStopSet(&mtrCtrl->statusReg); + mtrCtrl->motorStateFlag = 0; + } + mtrCtrl->spdAdjustMode = CUST_SPEED_ADJUST; + ackCode = 0X2B; + CUST_AckCode(g_uartTxBuf, ackCode, (float)mtrCtrl->spdAdjustMode); + /* Uart disconnect. */ + mtrCtrl->uartConnectFlag = DISCONNECT; + } +} + +/** + * @brief Check uart connect. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + */ +static void CMDCODE_UartHandShake(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData) +{ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); +} + +/** + * @brief Set Motor Initial Status Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorInitParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_OBSERVER_TYPE: { /* Set observer type. */ + CMDCODE_SetObserverType(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_PID_PARAMS: { /* Set motor pid parameters. */ + CMDCODE_SetMotorPidParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_OBSERVER_PARAMS: { /* Set observer parameters. */ + CMDCODE_SetObserverParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_TARGETSPD: { /* Set motor speed and speed slope. */ + CMDCODE_SetMotorSpdAndSlope(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_MOTOR_PARAMS: { /* Set motor parameters. */ + CMDCODE_SetMotorParams(mtrCtrl, rxData); + } + break; + case CMDCODE_SET_ADJUSTSPD_MODE: /* Set adjust speed mode. */ + CMDCODE_SetAdjustSpdMode(mtrCtrl, rxData); + break; + default: + break; + } +} + +/** + * @brief Set Motor Control System Status. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetMotorState(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + BASE_FUNC_UNUSED(rxData); + switch (code) { + case CMDCODE_MOTOR_START: { /* Motor start command */ + CMDCODE_MotorStart(mtrCtrl); + } + break; + case CMDCODE_MOTOR_STOP: { /* Motor stop command */ + CMDCODE_MotorStop(mtrCtrl); + } + break; + case CMDCODE_MOTORSTATE_RESET: { /* Motor reset command */ + CMDCODE_MotorReset(mtrCtrl); + } + break; + default: + break; + } +} + +/** + * @brief Set Startup and Uart Link Handshake Flag Parameters. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_SetOtherParams(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + switch (code) { + case CMDCODE_SET_STARTUP_PARAMS: /* Set start up parameters. */ + CMDCODE_SetStartupParams(mtrCtrl, rxData); + break; + case CMDCODE_UART_HANDSHAKE: { /* Check uart hand shake. */ + CMDCODE_UartHandShake(mtrCtrl, rxData); + } + break; + case CMDCODE_UART_HEARTDETECT: { /* Check uart hand shake. */ + mtrCtrl->uartHeartDetCnt++; + } + break; + default: + break; + } +} +/** + * @brief Instruction code executor. + * @param mtrCtrl The motor control handle. + * @param rxData Receive buffer + * @param code Instruction code. + */ +static void CMDCODE_EXE_Process(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *rxData, unsigned char code) +{ + CMDCODE_EXE_SetMotorInitParams(mtrCtrl, rxData, code); + CMDCODE_EXE_SetMotorState(mtrCtrl, rxData, code); + CMDCODE_EXE_SetOtherParams(mtrCtrl, rxData, code); +} + +/** + * @brief Host data download callback and data parsing. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + + /* Uart data storage struct */ + CUSTDATATYPE_DEF data; + volatile unsigned char *ptrCnt = &rxBuf[FRAME_CHECK_BEGIN + 1]; + volatile char *strCnt = &data.data[0].typeCh[0]; + for (unsigned int j = 0; j < FRAME_RECV_DATA_LENTH * FRAME_ONE_DATA_LENTH; j++) { + *strCnt++ = *ptrCnt++; + } + /* Message function code. */ + data.code = rxBuf[FRAME_CHECK_BEGIN]; + CMDCODE_EXE_Process(mtrCtrl, &data, data.code); +} + +/** + * @brief The host computer displays data transmission. + * @param mtrCtrl The motor control handle. + * @param txData Message content. + * @param stage Message status function code. + */ +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txData != NULL); + /* Data send to host. */ + txData->data[CURRDQ_Q].typeF = mtrCtrl->idqFbk.q; + txData->data[CURRDQ_D].typeF = mtrCtrl->idqFbk.d; + txData->data[CURRREFDQ_Q].typeF = mtrCtrl->idqRef.q; + txData->data[CURRREFDQ_D].typeF = mtrCtrl->idqRef.d; + /* Motor current speed. */ + txData->data[CURRSPD].typeF = mtrCtrl->encSpeed * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Motor commond speed. */ + txData->data[SPDCMDHZ].typeF = mtrCtrl->spdCmdHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + /* Bus voltage. */ + txData->data[UDC].typeF = mtrCtrl->udc; + /* Power board temprature. */ + txData->data[POWERBOARDTEMP].typeF = mtrCtrl->powerBoardTemp; + /* Motor protection status flag. */ + txData->data[CUST_ERR_CODE].typeI = mtrCtrl->prot.motorErrStatus.all; + /* Three phase current. */ + txData->data[CURRUVW_U].typeF = mtrCtrl->currUvw.u; + txData->data[CURRUVW_V].typeF = mtrCtrl->currUvw.v; + txData->data[CURRUVW_W].typeF = mtrCtrl->currUvw.w; + /* Three phase pwm duty. */ + txData->data[PWMDUTYUVW_U].typeF = mtrCtrl->dutyUvw.u; + txData->data[PWMDUTYUVW_V].typeF = mtrCtrl->dutyUvw.v; + txData->data[PWMDUTYUVW_W].typeF = mtrCtrl->dutyUvw.w; + /* Motor electric angle. */ + txData->data[AXISANGLE].typeF = mtrCtrl->axisAngle; + txData->data[VDQ_Q].typeF = mtrCtrl->vdqRef.q; + txData->data[VDQ_D].typeF = mtrCtrl->vdqRef.d; + txData->data[SPDREFHZ].typeF = mtrCtrl->spdRefHz * CONST_VALUE_60 / mtrCtrl->mtrParam.mtrNp; + txData->data[SENDTIMESTAMP].typeF = mtrCtrl->uartTimeStamp; +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/cust_process.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/cust_process.h new file mode 100644 index 00000000..60fe69bb --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/cust_process.h @@ -0,0 +1,36 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file cust_process.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "protocol.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); + +void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/hmi_module.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/hmi_module.c new file mode 100644 index 00000000..f6f762ad --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/hmi_module.c @@ -0,0 +1,58 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of human-machine interface. + */ + +#include "hmi_module.h" +#include "mcs_assert.h" + +/** + * @brief HMI Initializatio. + * @retval None. + */ +void HMI_Init(void) +{ + UartRecvInit(); + +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Rx(mtrCtrl); +} + +/** + * @brief HMI processing. + * @param mtrCtrl The motor control handle.. + * @retval None. + */ +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + UartModuleProcess_Tx(mtrCtrl); +} diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/hmi_module.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/hmi_module.h new file mode 100644 index 00000000..056f8d73 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/hmi_module.h @@ -0,0 +1,37 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file hmi_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of system status. + */ + +/* Define to prevent recursive inclusion ------------------------------------------------------- */ +#ifndef McsMagicTag_HMI_MOUDLE_H +#define McsMagicTag_HMI_MOUDLE_H + +/* Includes ------------------------------------------------------------------------------------ */ +#include "uart_module.h" +/* Typedef definitions ------------------------------------------------------------------------- */ + + +void HMI_Init(void); + +void HMI_Process_Rx(MTRCTRL_Handle *mtrCtrl); +void HMI_Process_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/protocol.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/protocol.c new file mode 100644 index 00000000..987b4c5a --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/protocol.c @@ -0,0 +1,174 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ + +#include "protocol.h" +#include "apt.h" +#include "typedefs.h" +#include "main.h" +#include "mcs_assert.h" +#include "cust_process.h" + +/** + * @brief Callback function for receiving data analysis and processing. + * @param rxBuf Receive buffer. + */ +__weak void CUST_UartDataProcess(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(rxBuf); +} +/** + * @brief User-defined protocol message sending function (weak function). + * @param rxData Sending Messages.. + */ +__weak void CUST_SetTxMsg(MTRCTRL_Handle *mtrCtrl, CUSTDATATYPE_DEF *txData) +{ + BASE_FUNC_UNUSED(mtrCtrl); + BASE_FUNC_UNUSED(*txData); +} + +static void (*g_ptrDataProcess)(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) = CUST_UartDataProcess; + +/** + * @brief Frame checksum. + * @param ptr Pointer to the data to be checked + * @param num Number of bytes + * @retval unsigned char Checksum + */ +static unsigned char CheckSum(unsigned char *ptr, unsigned char num) +{ + unsigned char sum = 0; + unsigned char *p = ptr; + /* Calculate the sum of received data. */ + for (int i = 0; i < num; i++) { + sum += *p; + p++; + } + return sum; +} + +/** + * @brief Transmitting Data Frames. + * @param mtrCtrl The motor control handle. + * @param txBuf Sending Messages. + */ +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(txBuf != NULL); + unsigned int dataLen = FRAME_ONE_DATA_LENTH * SEND_FRAME_DATA_NUM; + unsigned int i = 0; + CUSTDATATYPE_DEF txData = {0}; + CUST_SetTxMsg(mtrCtrl, &txData); + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_SENT; + /* Message data */ + for (unsigned char x = 0; x < SEND_FRAME_DATA_NUM; x++) { + int floatIndex = 0; + int byteOffset = i; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + txBuf[x * FRAME_ONE_DATA_LENTH + byteOffset++] = txData.data[x].typeCh[floatIndex++]; + } + /* Message verification domain */ + txBuf[dataLen + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[dataLen + i++] = FRAME_END; + return dataLen + i; +} + +/** + * @brief Transmitting Data Frames. + * @param txBuf Sending Cust Ack Code. + * @param ackCode Ack Code. + * @param varParams Host set parameter. + */ +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(txBuf != NULL); + CUSTDATATYPE_DEF txData = {0}; + int dataIndex = 0; + unsigned int i = 0; + unsigned int txLen = 0; + unsigned int dataLen = FRAME_ONE_CHAR_LENTH + FRAME_ONE_DATA_LENTH; + + txData.data[0].typeF = varParams; + txBuf[i++] = FRAME_START; + /* Message function code */ + txBuf[i++] = FRAME_CUSTACK; + /* Message ack code */ + txBuf[i++] = ackCode; + /* Message data */ + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + txBuf[i++] = txData.data[0].typeCh[dataIndex++]; + + /* Message verification domain */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = CheckSum((unsigned char*)&txBuf[FRAME_CHECK_BEGIN], dataLen + 1); + /* End of Message */ + txBuf[FRAME_ONE_CHAR_LENTH + i++] = FRAME_END; + txLen = FRAME_ONE_CHAR_LENTH + i++; + HAL_UART_WriteIT(&g_uart0, txBuf, txLen); +} + +/** + * @brief Cust receive data process. + * @param mtrCtrl The motor control handle. + * @param rxBuf Receive buffer + */ +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + MCS_ASSERT_PARAM(rxBuf != NULL); + unsigned char g_uartTxBuf[10] = {0}; + unsigned char ackCode = 0; + /* Frame header check */ + if (rxBuf[0] != FRAME_START) { + ackCode = 0X78; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Frame trailer check */ + if (rxBuf[FRAME_LENTH - 1] != FRAME_END) { + ackCode = 0X79; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } + /* Checksum */ + if (CheckSum((unsigned char*)&rxBuf[FRAME_CHECK_BEGIN], FRAME_CHECK_NUM) != rxBuf[FRAME_CHECKSUM]) { + ackCode = 0X7A; + CUST_AckCode(g_uartTxBuf, ackCode, 0); + return; + } else { + if (g_ptrDataProcess == NULL) { + return; + } else { + g_ptrDataProcess(mtrCtrl, rxBuf); + } + } +} diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/protocol.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/protocol.h new file mode 100644 index 00000000..33f0f49c --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/protocol.h @@ -0,0 +1,121 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file protocol.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of port communication. + */ +#ifndef McsMagicTag_PORTOCOL_H +#define McsMagicTag_PORTOCOL_H + +#include "uart.h" +#include "mcs_carrier.h" + +#define RS485_SEND_ENABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = GPIO_PIN_7 +#define RS485_SEND_DISABLE GPIO6->GPIO_DATA[GPIO_PIN_7].reg = BASE_CFG_UNSET + +#define RX_BUF_LEN (16) +#define SEND_FRAME_DATA_NUM (CUSTDATA_MAX) +/* Service Uart0 Communication Deal */ +#define FRAME_ONE_DATA_LENTH 4 +#define FRAME_ONE_CHAR_LENTH 1 +#define FRAME_RECV_DATA_LENTH 4 +#define FRAME_LENTH 20 /* Data length */ +#define FRAME_SENT 0X8F +#define FRAME_CUSTACK 0X8A +#define FRAME_START 0x0F /* Start frame */ +#define FRAME_END '/' /* StOP frame */ +#define FRAME_CHECK_BEGIN 1 /* Check frame */ +#define FRAME_CHECKSUM 18 /* Check sum */ +#define FRAME_CHECK_NUM 17 +#define CMDCODE_IDLE_FRAME 0x55 /* Fill frame */ +#define CMDCODE_GET_MOTOR_PARAMS 0x01 +#define CMDCODE_SEND_MOTOR_PARAMS 0x02 +#define CMDCODE_SET_MOTOR_CTLMODE 0x03 +#define CMDCODE_SET_OBSERVER_TYPE 0x04 +#define CMDCODE_SET_STARTUP_MODE 0x05 +#define CMDCODE_SET_PID_PARAMS 0x06 +#define CMDCODE_SET_STARTUP_PARAMS 0x07 +#define CMDCODE_SET_OBSERVER_PARAMS 0x08 +#define CMDCODE_SET_MOTOR_TARGETSPD 0x09 +#define CMDCODE_SET_MOTOR_PARAMS 0x0A +#define CMDCODE_MOTOR_START 0x0B +#define CMDCODE_MOTOR_STOP 0x0C +#define CMDCODE_MOTORSTATE_RESET 0x0D +#define CMDCODE_SEND_FIRMVERSION 0x0E +#define CMDCODE_SET_ADJUSTSPD_MODE 0x11 +#define CMDCODE_UART_HANDSHAKE 0x12 +#define CMDCODE_UART_HEARTDETECT 0x13 + +typedef union { + char typeCh[4]; + float typeF; + int typeI; +} UNIONDATATYPE_DEF; + +typedef enum { + OFFLINE_RES = 0, + OFFLINE_LD, + OFFLINE_LQ, + OFFLINE_PSIF, + OFFLINE_JS, + OFFLINE_NP, + OFFLINE_B, + OFFLINE_KPD, + OFFLINE_KID, + OFFLINE_KPQ, + OFFLINE_KIQ, + OFFLINE_KPS, + OFFLINE_KIS, + OFFLINE_SPEED, + OFLINE_MAX +} OFFLINE_IDEN_TYPE; + +typedef enum { + CURRDQ_Q = 0, + CURRDQ_D, + CURRREFDQ_Q, + CURRREFDQ_D, + CURRSPD, + SPDCMDHZ, + UDC, + POWERBOARDTEMP, + CUST_ERR_CODE, + CURRUVW_U, + CURRUVW_V, + CURRUVW_W, + PWMDUTYUVW_U, + PWMDUTYUVW_V, + PWMDUTYUVW_W, + AXISANGLE, + VDQ_Q, + VDQ_D, + SPDREFHZ, + SENDTIMESTAMP, + CUSTDATA_MAX +} SENDTOHOSTPARAMS; + +typedef struct { + volatile unsigned char code; + volatile UNIONDATATYPE_DEF data[SEND_FRAME_DATA_NUM]; +} CUSTDATATYPE_DEF; + + +void CUST_DataReceProcss(MTRCTRL_Handle *mtrCtrl, unsigned char *rxBuf); +unsigned int CUST_TransmitData(MTRCTRL_Handle *mtrCtrl, unsigned char *txBuf); +void CUST_AckCode(unsigned char *txBuf, unsigned char ackCode, float varParams); +#endif /* McsMagicTag_PORTOCOL_H */ diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/uart_module.c b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/uart_module.c new file mode 100644 index 00000000..8ded8180 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/uart_module.c @@ -0,0 +1,234 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.c + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#include "uart_module.h" +#include "debug.h" +#include "main.h" +#include "baseinc.h" +#include +/* Buffer size */ +#define UI_TX_BUF_LEN (96) +#define UI_RX_BUF_LEN (96) + +/* Receiving Timeout Interval */ +#define UART_TIME_OUT_MS (100) + +/* Start sending data to host delay after uart connect success */ +#define UART_UPDATA_DELAY_TIME_MS (50) + +/* Uart baudrate */ +#define UART0BAUDRATE (115200) + +/* Data buffer */ +unsigned char g_uartRxBuf[UI_RX_BUF_LEN] = {0}; +unsigned char g_uartTxBuf[UI_TX_BUF_LEN] = {0}; +static unsigned int getdeltaSystickCnt = 0; +static FRAME_Handle g_uartFrame; +__UINT32_TYPE__ uart_spdcmd;//串口速度命令 +double uart_poscmd; //串口位置命令 + +/** + * @brief Receive Data Clear. + * @param uartFrame Receice Data. + */ +static void FrameRecvClear(FRAME_Handle *uartFrame) +{ + /* Clear buffer lenth. */ + uartFrame->buffLen = 0; + uartFrame->timeOutCnt = 0; + uartFrame->frameFlag = 0; + /* Clear received data lenth. */ + uartFrame->rxLen = 0; + /* Clear received flag. */ + uartFrame->rxFlag = 0; + uartFrame->upDataCnt = 0; +} + +/** + * @brief Set Dma status. + * @param mtrCtrl The motor control handle. + */ +static void SetUartDmaStatus(MTRCTRL_Handle *mtrCtrl) +{ + /* Delay 50ms start uart Tx DMA . */ + if (mtrCtrl->uartConnectFlag == CONNECTING && g_uartFrame.upDataDelayCnt++ > UART_UPDATA_DELAY_TIME_MS) { + g_uartFrame.txFlag = 1; /* Start send data flag. */ + mtrCtrl->uartConnectFlag = CONNECTED; + g_uartFrame.upDataDelayCnt = 0; + } + if (mtrCtrl->uartConnectFlag == DISCONNECT) { + g_uartFrame.txFlag = 0; /* Stop send data flag. */ + mtrCtrl->uartTimeStamp = 0; + } +} + +/** + * @brief Set uart baudRate. + * @param baudrate Uart baudRate. + */ +static void SetUartBaudRate(unsigned int baudrate) +{ + /* Re_Write uart0 baudrate. */ + g_uart0.baudRate = baudrate; + HAL_UART_Init(&g_uart0); +} + +/** + * @brief Uart Dma interupt callback func. + * @param null. + */ +void UART0_TXDMACallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + unsigned int getCurSystickCnt = 0; + static unsigned int getlastSystickCnt = 0; + /* USER CODE BEGIN UART0_WRITE_DMA_FINISH */ + g_uartFrame.txFlag = 1; + getCurSystickCnt = DCL_SYSTICK_GetTick(); + if (getlastSystickCnt != 0) { + /* Calculate unit frame data send time */ + getdeltaSystickCnt = getCurSystickCnt - getlastSystickCnt; + } + getlastSystickCnt = getCurSystickCnt; + /* USER CODE END UART0_WRITE_DMA_FINISH */ +} + +/** + * @brief Uart0 interruput Write CallBack Function. + * @param handle Uart handle. + */ +void UART0WriteInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_WRITE_IT_FINISH */ + g_uartFrame.uartItTxFlag = 1; + g_uartFrame.txFlag = 1; + /* USER CODE END UART0_WRITE_IT_FINISH */ +} + +__UINT32_TYPE__ ascii_to_int_manual(const __UINT8_TYPE__ *buf, __UINT8_TYPE__ len) { + __UINT32_TYPE__ result = 0; + bool is_negative = false; + __UINT8_TYPE__ i = 0; + + // 检查符号位 + if (len > 0 && buf[0] == '-') { + is_negative = true; + i = 1; // 跳过符号位 + } + + // 逐字符转换 + for (; i < len; i++) { + if (buf[i] < '0' || buf[i] > '9') { + break; // 遇到非数字字符停止 + } + + // 检查溢出 + // if (result > (INT32_MAX - (buf[i] - '0')) / 10) { + // return is_negative ? INT32_MIN : INT32_MAX; + // } + + result = result * 10 + (buf[i] - '0'); + } + + return is_negative ? -result : result; +} + + + +/** + * @brief Uart0 Interruput Read CallBack Function. + * @param handle Uart handle. + */ +void UART0ReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART0_READ_IT_FINISH */ + if (g_uartFrame.rxLen >= UI_RX_BUF_LEN - 1) { + g_uartFrame.rxLen = 0; + } + HAL_UART_ReadIT(handle, &g_uartFrame.rxData, 1); + g_uartRxBuf[g_uartFrame.rxLen] = g_uartFrame.rxData; + + uart_spdcmd=ascii_to_int_manual(g_uartRxBuf, 3);//字符串转整型 + uart_poscmd=atof(g_uartRxBuf);//字符串转浮点 + g_uartFrame.rxLen++; + g_uartFrame.rxFlag = 1; + g_uartFrame.uartItTxFlag = 0; + return; + /* USER CODE END UART0_READ_IT_FINISH */ +} + +/** + * @brief Uart Read Data Init Function. + * @param void. + */ +void UartRecvInit(void) +{ + /* Uart reception initialization */ + FrameRecvClear(&g_uartFrame); + SetUartBaudRate(UART0BAUDRATE); + HAL_UART_ReadIT(&g_uart0, &g_uartFrame.rxData, 1); +} + +/** + * @brief Uart Read Data Process Function. + * @param mtrCtrl The motor control handle. + */ +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + SetUartDmaStatus(mtrCtrl); + if (g_uartFrame.rxFlag == 1) { /* Receive data flag. */ + if (g_uartFrame.timeOutCnt++ > UART_TIME_OUT_MS) { + /* Received data from the host. */ + g_uartFrame.frameFlag = 1; + g_uartFrame.rxFlag = 0; + g_uartFrame.timeOutCnt = 0; + /* Execute data process. */ + CUST_DataReceProcss(mtrCtrl, g_uartRxBuf); + g_uartFrame.rxLen = 0; + } + } + g_uartFrame.frameFlag = 0; +} + +/** + * @brief Uart Write Data Process Function. + * @param mtrCtrl The motor control handle. + */ +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl) +{ + /* Verify Parameters */ + MCS_ASSERT_PARAM(mtrCtrl != NULL); + if (g_uartFrame.txFlag == 1) { /* Send data flag. */ + mtrCtrl->uartTimeStamp = (float)getdeltaSystickCnt; /* Unit data time stamp */ + g_uartFrame.upDataCnt = 0; + g_uartFrame.txFlag = 0; + /* Send data to host. */ + unsigned int txLen = CUST_TransmitData(mtrCtrl, g_uartTxBuf); + /* If txIT mode send data finish, convert to DMA mode */ + if (g_uartFrame.uartItTxFlag == 1) { + HAL_UART_WriteDMA(&g_uart0, g_uartTxBuf, txLen); + } + } +} diff --git a/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/uart_module.h b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/uart_module.h new file mode 100644 index 00000000..fce60120 --- /dev/null +++ b/vendor/yibaina_3061M/pmsm_pos_qdm_foc/user/pmsm_encode_qdm_2shunt_foc/user_interface/uart_module.h @@ -0,0 +1,48 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file uart_module.h + * @author MCU Algorithm Team + * @brief This file provides functions declaration of Serial port communication. + */ +#ifndef McsMagicTag_UART_MODULE_H +#define McsMagicTag_UART_MODULE_H + +#include "protocol.h" +#include "mcs_ctlmode_config.h" + +extern __UINT32_TYPE__ uart_spdcmd; +extern double uart_poscmd; +typedef struct { + unsigned int buffLen; + unsigned int timeOutCnt; + unsigned char frameFlag; + unsigned int rxLen; + unsigned char rxFlag; + unsigned char txFlag; + unsigned char rxData; + unsigned int upDataCnt; + unsigned int upDataDelayCnt; + unsigned char uartItTxFlag; +} FRAME_Handle; + + +void UartRecvInit(void); +void UartModuleProcess_Rx(MTRCTRL_Handle *mtrCtrl); +void UartModuleProcess_Tx(MTRCTRL_Handle *mtrCtrl); + +#endif \ No newline at end of file diff --git a/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/feature.h b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/feature.h new file mode 100644 index 00000000..9877915e --- /dev/null +++ b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/feature.h @@ -0,0 +1,120 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file feature.h + * @author MCU Driver Team + * @brief This file contains macro configurations related to the project. This file is generated by the IDE tool. + * @date 2025-04-27 14:34:34 + */ + +#ifndef McuMagicTag_FEATURE_H +#define McuMagicTag_FEATURE_H + +/* Macro definitions --------------------------------------------------------- */ +#define CHIP_3061MNPICA MACRO_ENABLE + +#define MACRO_ENABLE 1 +#define MACRO_DISABLE 0 + +/* Macro switch */ +#define BASE_DEFINE_USE_ASSERT MACRO_ENABLE +#ifndef FLASH_CRC_CONFIG +#define FLASH_CRC_CONFIG +#endif /* #ifndef FLASH_CRC_CONFIG */ +#define BASE_MATH_SINCOS_MIDDLE_TABLE MACRO_ENABLE /**< This macro is used to control the table type when the + BASE_MATH_GetSinCos() queries the table. When the value of + this macro is MACRO_ENABLE, the error value obtained by the + BASE_MATH_GetSinCos() is relatively small, and the return + value of the function may be greater than or less than the + actual value. When the value of this macro is MACRO_DISABLE, + the error value obtained by the BASE_MATH_GetSinCos() is + relatively large. However, in the range [0°, 180°) and + [180°, 360°), the return value of the function is either + greater than or less than the actual value. */ + +#define MCS_PARAM_CHECK MACRO_ENABLE +#define APT_PARAM_CHECK MACRO_ENABLE +#define ADC_PARAM_CHECK MACRO_ENABLE +#define CAPM_PARAM_CHECK MACRO_ENABLE +#define CRG_PARAM_CHECK MACRO_ENABLE +#define I2C_PARAM_CHECK MACRO_ENABLE +#define UART_PARAM_CHECK MACRO_ENABLE +#define SPI_PARAM_CHECK MACRO_ENABLE +#define TIMER_PARAM_CHECK MACRO_ENABLE +#define IWDG_PARAM_CHECK MACRO_ENABLE +#define WWDG_PARAM_CHECK MACRO_ENABLE +#define GPIO_PARAM_CHECK MACRO_ENABLE +#define GPT_PARAM_CHECK MACRO_ENABLE +#define DMA_PARAM_CHECK MACRO_ENABLE +#define CRC_PARAM_CHECK MACRO_ENABLE +#define CFD_PARAM_CHECK MACRO_ENABLE +#define CMM_PARAM_CHECK MACRO_ENABLE +#define CAN_PARAM_CHECK MACRO_ENABLE +#define FLASH_PARAM_CHECK MACRO_ENABLE +#define PMC_PARAM_CHECK MACRO_ENABLE +#define ACMP_PARAM_CHECK MACRO_ENABLE +#define DAC_PARAM_CHECK MACRO_ENABLE +#define PGA_PARAM_CHECK MACRO_ENABLE +#define IOCMG_PARAM_CHECK MACRO_ENABLE +#define QDM_PARAM_CHECK MACRO_ENABLE + +/* Peripheral module macro switch--------------------------------------------- */ +#define BOARD_DIM_NUM 1 /**< Number of dimming handle arrays. */ + +#define BOARD_KEY_NUM 10 /**< Number of key handle arrays. */ +#define BOARD_KEY_PRESS_ON GPIO_HIGH_LEVEL /**< GPIO status corresponding to long press valid. */ +#define BOARD_KEY_PRESS_OFF GPIO_LOW_LEVEL /**< GPIO status corresponding to short press valid. */ + +#define BOARD_LED_SEG_NUM 4 /**< Number of segments. */ +#define BOARD_LED_SEGMENT_ON GPIO_HIGH_LEVEL /**< GPIO level status corresponding to valid segments. */ +#define BOARD_LED_SEGMENT_OFF GPIO_LOW_LEVEL /**< GPIO level status corresponding to invalid segments. */ + +#define BOARD_MKEY_SCHEME_NUMBER BOARD_MKEY_SCHEME_NUMBER_ONE /**< Define the scheme to be adopted. */ +#define BOARD_MKEY_OUT_NUM 4 /**< Number of GPIO pins used as output during scanning. */ +#define BOARD_MKEY_IN_NUM 4 /**< Number of GPIO pins used as input during scanning. */ +#define BOARD_MKEY_OUT_PIN_VALID GPIO_LOW_LEVEL /**< GPIO level status corresponding to the valid \ + status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_OUT_PIN_INVALID GPIO_HIGH_LEVEL /**< GPIO level status corresponding to the \ + invalid status of the output GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_VALID GPIO_LOW_LEVEL /**< Indicates the GPIO level corresponding to the \ + valid status of the input GPIO in the key matrix. */ +#define BOARD_MKEY_IN_PIN_INVALID GPIO_HIGH_LEVEL /**< Indicates the GPIO level corresponding to the \ + invalid status of the input GPIO in the key matrix. */ + +#define BOARD_PULSES_NUM 2 /**< Number of pulse handles. */ + +#define BASE_DEFINE_SLIPAVERAGE_NUM 2 /**< Sliding average array length. */ + +#define LISTNODE_MAX 20 + +#define BASE_DEFINE_DMA_QUICKSTART + +#define XTRAIL_FREQ 30000000U + +#define DBG_USE_NO_PRINTF 0U +#define DBG_USE_UART_PRINTF 1U + +#define DBG_PRINTF_USE DBG_USE_UART_PRINTF +#if (DBG_PRINTF_USE == DBG_USE_UART_PRINTF) +#define DBG_PRINTF_UART_PORT UART0 +#endif + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_FEATURE_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/main.h b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/main.h new file mode 100644 index 00000000..fba9fc48 --- /dev/null +++ b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/main.h @@ -0,0 +1,61 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.h + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-27 14:34:34 + */ + +/* Define to prevent recursive inclusion ------------------------------------- */ +#ifndef McuMagicTag_SYSTEM_INIT_H +#define McuMagicTag_SYSTEM_INIT_H + +#include "uart.h" +#include "uart_ex.h" +#include "crg.h" +#include "iocmg.h" + +#define IO_SPEED_FAST 0x00U +#define IO_SPEED_SLOW 0x01U + +#define IO_DRV_LEVEL4 0x00U +#define IO_DRV_LEVEL3 0x01U +#define IO_DRV_LEVEL2 0x02U +#define IO_DRV_LEVEL1 0x03U + +#define XTAL_DRV_LEVEL4 0x03U +#define XTAL_DRV_LEVEL3 0x02U +#define XTAL_DRV_LEVEL2 0x01U +#define XTAL_DRV_LEVEL1 0x00U + +extern UART_Handle g_uart0; +extern UART_Handle g_uart3; + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect); +void SystemInit(void); + +void UART3_wifiWriteInterruptCallback(void *handle); +void UART3_wifiReadInterruptCallback(void *handle); + +void UART3_wifiInterruptErrorCallback(void *handle); + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* USER CODE END 0 */ + +#endif /* McuMagicTag_SYSTEM_INIT_H */ \ No newline at end of file diff --git a/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/system_init.c b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/system_init.c new file mode 100644 index 00000000..df77c122 --- /dev/null +++ b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/system_init.c @@ -0,0 +1,166 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file system_init.c + * @author MCU Driver Team + * @brief This file contains driver init functions. + * @date 2025-04-27 14:34:34 + */ + +#include "main.h" +#include "ioconfig.h" +#include "iocmg_ip.h" + +#define UART0_BAUD_RATE 115200 +#define UART3_BAUD_RATE 115200 + +BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect) +{ + CRG_Handle crg; + crg.baseAddress = CRG; + crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC; + crg.pllPreDiv = CRG_PLL_PREDIV_4; + crg.pllFbDiv = 48; /* PLL Multiplier 48 */ + crg.pllPostDiv = CRG_PLL_POSTDIV_2; + crg.coreClkSelect = CRG_CORE_CLK_SELECT_PLL; + crg.handleEx.pllPostDiv2 = CRG_PLL_POSTDIV2_3; + crg.handleEx.clk1MSelect = CRG_1M_CLK_SELECT_HOSC; + crg.handleEx.clk1MDiv = (25 - 1); /* The 1 MHz freq is equal to the input clock frequency / (clk_1m_div + 1). 25 is the div of the clk_1m in CLOCK. */ + + if (HAL_CRG_Init(&crg) != BASE_STATUS_OK) { + return BASE_STATUS_ERROR; + } + *coreClkSelect = crg.coreClkSelect; + return BASE_STATUS_OK; +} + +static void UART0_Init(void) +{ + HAL_CRG_IpEnableSet(UART0_BASE, IP_CLK_ENABLE); /* UART0 clock enable. */ + g_uart0.baseAddress = UART0; + + g_uart0.baudRate = UART0_BAUD_RATE; + g_uart0.dataLength = UART_DATALENGTH_8BIT; + g_uart0.stopBits = UART_STOPBITS_ONE; + g_uart0.parity = UART_PARITY_NONE; + g_uart0.txMode = UART_MODE_BLOCKING; + g_uart0.rxMode = UART_MODE_BLOCKING; + g_uart0.fifoMode = BASE_CFG_ENABLE; + g_uart0.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart0.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart0.hwFlowCtr = BASE_CFG_DISABLE; + g_uart0.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart0.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart0); +} + +__weak void UART3_wifiInterruptErrorCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART3_wifiInterruptErrorCallback */ + /* USER CODE END UART3_wifiInterruptErrorCallback */ +} + +__weak void UART3_wifiWriteInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART3_wifiWriteInterruptCallback */ + /* USER CODE END UART3_wifiWriteInterruptCallback */ +} + +__weak void UART3_wifiReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + /* USER CODE BEGIN UART3_wifiReadInterruptCallback */ + /* USER CODE END UART3_wifiReadInterruptCallback */ +} + +static void UART3_Init(void) +{ + HAL_CRG_IpEnableSet(UART3_BASE, IP_CLK_ENABLE); /* UART3 clock enable. */ + g_uart3.baseAddress = UART3; + + g_uart3.baudRate = UART3_BAUD_RATE; + g_uart3.dataLength = UART_DATALENGTH_8BIT; + g_uart3.stopBits = UART_STOPBITS_ONE; + g_uart3.parity = UART_PARITY_NONE; + g_uart3.txMode = UART_MODE_INTERRUPT; + g_uart3.rxMode = UART_MODE_INTERRUPT; + g_uart3.fifoMode = BASE_CFG_ENABLE; + g_uart3.fifoTxThr = UART_FIFODEPTH_SIZE8; + g_uart3.fifoRxThr = UART_FIFODEPTH_SIZE8; + g_uart3.hwFlowCtr = BASE_CFG_DISABLE; + g_uart3.handleEx.overSampleMultiple = UART_OVERSAMPLING_16X; + g_uart3.handleEx.msbFirst = BASE_CFG_DISABLE; + HAL_UART_Init(&g_uart3); + HAL_UART_RegisterCallBack(&g_uart3, UART_TRNS_IT_ERROR, (UART_CallbackType)UART3_wifiInterruptErrorCallback); + HAL_UART_RegisterCallBack(&g_uart3, UART_WRITE_IT_FINISH, (UART_CallbackType)UART3_wifiWriteInterruptCallback); + HAL_UART_RegisterCallBack(&g_uart3, UART_READ_IT_FINISH, (UART_CallbackType)UART3_wifiReadInterruptCallback); + IRQ_Register(IRQ_UART3, HAL_UART_IrqHandler, &g_uart3); + IRQ_SetPriority(IRQ_UART3, 1); /* 1 is priority value */ + IRQ_EnableN(IRQ_UART3); +} + +static void IOConfig(void) +{ + /* Config PIN36 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_0_AS_JTAG_TCK); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_0_AS_JTAG_TCK, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_0_AS_JTAG_TCK, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_0_AS_JTAG_TCK, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_0_AS_JTAG_TCK, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN37 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_1_AS_JTAG_TMS); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_1_AS_JTAG_TMS, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_1_AS_JTAG_TMS, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_1_AS_JTAG_TMS, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_1_AS_JTAG_TMS, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN39 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_3_AS_UART0_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_3_AS_UART0_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_3_AS_UART0_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_3_AS_UART0_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_3_AS_UART0_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN40 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO0_4_AS_UART0_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO0_4_AS_UART0_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO0_4_AS_UART0_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO0_4_AS_UART0_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO0_4_AS_UART0_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN17 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_3_AS_UART3_TXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_3_AS_UART3_TXD, PULL_NONE); /* Pull-up and Pull-down */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_3_AS_UART3_TXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_3_AS_UART3_TXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_3_AS_UART3_TXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ + /* Config PIN18 */ + HAL_IOCMG_SetPinAltFuncMode(GPIO1_4_AS_UART3_RXD); /* Check function selection */ + HAL_IOCMG_SetPinPullMode(GPIO1_4_AS_UART3_RXD, PULL_UP); /* Pull-up and Pull-down, UART RX recommend PULL_UP */ + HAL_IOCMG_SetPinSchmidtMode(GPIO1_4_AS_UART3_RXD, SCHMIDT_DISABLE); /* Schmitt input on/off */ + HAL_IOCMG_SetPinLevelShiftRate(GPIO1_4_AS_UART3_RXD, LEVEL_SHIFT_RATE_SLOW); /* Output drive capability */ + HAL_IOCMG_SetPinDriveRate(GPIO1_4_AS_UART3_RXD, DRIVER_RATE_2); /* Output signal edge fast/slow */ +} + +void SystemInit(void) +{ + IOConfig(); + UART0_Init(); + UART3_Init(); + + /* USER CODE BEGIN system_init */ + /* USER CODE END system_init */ +} \ No newline at end of file diff --git a/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/MQTT.c b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/MQTT.c new file mode 100644 index 00000000..41e4a650 --- /dev/null +++ b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/MQTT.c @@ -0,0 +1,397 @@ + +/* +**************************************************************************************** +* INCLUDES (头文件包含) +**************************************************************************************** +*/ +#include "MQTT.h" +#include "string.h" + +u8 txbuf[256]={0}; +u8 rxbuf[256]={0}; + + +//连接成功服务器回应 20 02 00 00 +//客户端主动断开连接 e0 00 +const u8 parket_connetAck[] = {0x20,0x02,0x00,0x00};//由于在接收字符时,当我接收到'\0'就转变成' '来存储,所以接收到的回应则是0x20 02 0x20 0x20 +const u8 parket_disconnet[] = {0xe0,0x00}; +const u8 parket_subAck[] = {0x90,0x03}; +const u8 parket_heart[] = {0xc0,0x00}; +const u8 parket_heart_reply[] = {0xd0,0x00};//由于在接收字符时,当我接收到'\0'就转变成' '来存储,所以接收到的回应则是0xd0 0x20 + + +/* +**************************************************************************************** +* LOCAL FUNCTIONS DECLARE (静态函数声明) +**************************************************************************************** +*/ +static void Init(u8 *prx,u16 rxlen,u8 *ptx,u16 txlen); +static u8 Connect(char *ClientID,char *Username,char *Password); +static void Disconnect(void); +static u8 SubscribeTopic(char *topic,u8 qos,u8 whether); +static u8 PublishData(char *topic, char *message, u8 qos); +static void SentHeart(void); +static void SendData(u8* p,u16 len); + +/* +**************************************************************************************** +* LOCAL FUNCTIONS (静态函数) +**************************************************************************************** +*/ +_typdef_mqtt _mqtt = +{ + 0,0, + 0,0, + Init, + Connect, + Disconnect, + SubscribeTopic, + PublishData, + SentHeart, + SendData, +}; + + +static u8 BYTE1(int num) +{ + return (u8)((num&0xFF00)>>8); +} +static u8 BYTE0(int num) +{ + return (u8)(num&0xFF); +} + +/* +**************************************************************************************** +* Function: Init +* Description: MQTT初始化 +* Input: None +* Output: None +* Return: None +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static void Init(u8 *prx,u16 rxlen,u8 *ptx,u16 txlen) +{ + _mqtt.rxbuf = prx;_mqtt.rxlen = rxlen; + _mqtt.txbuf = ptx;_mqtt.txlen = txlen; + +// memset(_mqtt.rxbuf,0,_mqtt.rxlen); +// memset(_mqtt.txbuf,0,_mqtt.txlen); +// +// //无条件先主动断开,发送4次,保证能断开 +// _mqtt.Disconnect();BASE_FUNC_DelayMs(100); +// _mqtt.Disconnect();BASE_FUNC_DelayMs(100); +// _mqtt.Disconnect();BASE_FUNC_DelayMs(100); +// _mqtt.Disconnect();BASE_FUNC_DelayMs(100); +} + +/* +**************************************************************************************** +* Function: Connect +* Description: 连接服务器的打包函数 +* Input: ClientID:客户端标识符 + Username:用户名 + Password:密码 +* Output: None +* Return: 1成功 0失败 +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static __UINT8_TYPE__ Connect(char *ClientID,char *Username,char *Password) +{ + int ClientIDLen = strlen(ClientID); + int UsernameLen = strlen(Username); + int PasswordLen = strlen(Password); + int DataLen; + _mqtt.txlen=0; + //Variable Header(可变报头)+Payload(有效负荷) 每个字段包含两个字节的长度标识 + DataLen = 10 + (ClientIDLen+2) + (UsernameLen+2) + (PasswordLen+2); + + //固定报头 + //控制报文类型 + _mqtt.txbuf[_mqtt.txlen++] = 0x10; //MQTT Message Type CONNECT + //剩余长度(不包括固定头部) + do + { + u8 encodedByte = DataLen % 128; + DataLen = DataLen / 128; + // if there are more data to encode, set the top bit of this byte + if ( DataLen > 0 ) + encodedByte = encodedByte | 128; + _mqtt.txbuf[_mqtt.txlen++] = encodedByte; + }while ( DataLen > 0 ); + + //可变报头 + //协议名 + _mqtt.txbuf[_mqtt.txlen++] = 0; // Protocol Name Length MSB + _mqtt.txbuf[_mqtt.txlen++] = 4; // Protocol Name Length LSB + _mqtt.txbuf[_mqtt.txlen++] = 'M'; // ASCII Code for M + _mqtt.txbuf[_mqtt.txlen++] = 'Q'; // ASCII Code for Q + _mqtt.txbuf[_mqtt.txlen++] = 'T'; // ASCII Code for T + _mqtt.txbuf[_mqtt.txlen++] = 'T'; // ASCII Code for T + //协议级别 + _mqtt.txbuf[_mqtt.txlen++] = 4; // MQTT Protocol version = 4 + //连接标志 + _mqtt.txbuf[_mqtt.txlen++] = 0xc2; // conn flags + //心跳间隔时间 + _mqtt.txbuf[_mqtt.txlen++] = 0x01; // Keep-alive Time Length MSB + _mqtt.txbuf[_mqtt.txlen++] = 0xF4; // Keep-alive Time Length LSB 500S心跳包 + + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(ClientIDLen);// Client ID length MSB + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(ClientIDLen);// Client ID length LSB + memcpy(&_mqtt.txbuf[_mqtt.txlen],ClientID,ClientIDLen); + _mqtt.txlen += ClientIDLen; + + if(UsernameLen > 0) + { + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(UsernameLen); //username length MSB + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(UsernameLen); //username length LSB + memcpy(&_mqtt.txbuf[_mqtt.txlen],Username,UsernameLen); + _mqtt.txlen += UsernameLen; + } + + if(PasswordLen > 0) + { + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(PasswordLen); //password length MSB + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(PasswordLen); //password length LSB + memcpy(&_mqtt.txbuf[_mqtt.txlen],Password,PasswordLen); + _mqtt.txlen += PasswordLen; + } + + //printf("%s",_mqtt.txbuf); + _mqtt.SendData(_mqtt.txbuf,_mqtt.txlen); + + u16 time=0; + while(!esp32.tc_flag)//等待传输完成标志 + { + BASE_FUNC_DelayMs(1); + if(++time>500) //超时 + break; + } + if(esp32.tc_flag) + { + esp32.tc_flag=0;//清标志 + //if(rxbuf[0]==parket_connetAck[0] && rxbuf[1]==parket_connetAck[1]) //连接成功 + if(esp32.ReceiveBuffer[0]==parket_connetAck[0] && esp32.ReceiveBuffer[1]==parket_connetAck[1]) //连接成功 + { + return 1;//连接成功 + } + } + + return 0; + + +} + +/* +**************************************************************************************** +* Function: SubscribeTopic +* Description: MQTT订阅/取消订阅数据打包并发送 +* Input: topic 主题 + qos 消息等级 + 0:最多一次,即:<=1 + 1:至少一次,即:>=1 + 2:一次,即:=1 + whether 1订阅/0取消订阅请求包 +* Output: None +* Return: 1成功 0失败 +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static u8 SubscribeTopic(char *topic,u8 qos,u8 whether) +{ + _mqtt.txlen=0; + int topiclen = strlen(topic); + + int DataLen = 2 + (topiclen+2) + (whether?1:0);//可变报头的长度(2字节)加上有效载荷的长度 + //固定报头 + //控制报文类型 + if(whether) _mqtt.txbuf[_mqtt.txlen++] = 0x82; //消息类型和标志订阅 + else _mqtt.txbuf[_mqtt.txlen++] = 0xA2; //取消订阅 + + //剩余长度 + do + { + u8 encodedByte = DataLen % 128; + DataLen = DataLen / 128; + // if there are more data to encode, set the top bit of this byte + if ( DataLen > 0 ) + encodedByte = encodedByte | 128; + _mqtt.txbuf[_mqtt.txlen++] = encodedByte; + }while ( DataLen > 0 ); + + //可变报头 + _mqtt.txbuf[_mqtt.txlen++] = 0; //消息标识符 MSB + _mqtt.txbuf[_mqtt.txlen++] = 0x01; //消息标识符 LSB + //有效载荷 + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(topiclen);//主题长度 MSB + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(topiclen);//主题长度 LSB + memcpy(&_mqtt.txbuf[_mqtt.txlen],topic,topiclen); + _mqtt.txlen += topiclen; + + if(whether) + { + _mqtt.txbuf[_mqtt.txlen++] = qos;//QoS级别 + } + + _mqtt.SendData(_mqtt.txbuf,_mqtt.txlen); + + u16 time=0; + while(!esp32.tc_flag)//等待传输完成标志 + { + BASE_FUNC_DelayMs(1); + if(++time>500) //超时 + break; + + } + if(esp32.tc_flag) + { + esp32.tc_flag=0;//清标志 + //if(_mqtt.rxbuf[0]==parket_subAck[0] && _mqtt.rxbuf[1]==parket_subAck[1]) //订阅成功 + if(esp32.ReceiveBuffer[0]==parket_subAck[0] && esp32.ReceiveBuffer[1]==parket_subAck[1]) //订阅成功 + { + return 1;//订阅成功 + } + } + + return 0; + +} + +/* +**************************************************************************************** +* Function: PublishData +* Description: MQTT发布数据打包并发送 +* Input: topic 主题 + message 消息 + qos 消息等级 +* Output: None +* Return: 数据包长度 +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static __UINT8_TYPE__ PublishData(char *topic, char *message, __UINT8_TYPE__ qos) +{ + int topicLength = strlen(topic); + int messageLength = strlen(message); + static u16 id=0; + int DataLen; + _mqtt.txlen=0; + //有效载荷的长度这样计算:用固定报头中的剩余长度字段的值减去可变报头的长度 + //QOS为0时没有标识符 + //数据长度 主题名 报文标识符 有效载荷 + if(qos) DataLen = (2+topicLength) + 2 + messageLength; + else DataLen = (2+topicLength) + messageLength; + + //固定报头 + //控制报文类型 + _mqtt.txbuf[_mqtt.txlen++] = 0x30; // MQTT Message Type PUBLISH + + //剩余长度 + do + { + u8 encodedByte = DataLen % 128; + DataLen = DataLen / 128; + // if there are more data to encode, set the top bit of this byte + if ( DataLen > 0 ) + encodedByte = encodedByte | 128; + _mqtt.txbuf[_mqtt.txlen++] = encodedByte; + }while ( DataLen > 0 ); + + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(topicLength);//主题长度MSB + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(topicLength);//主题长度LSB + memcpy(&_mqtt.txbuf[_mqtt.txlen],topic,topicLength);//拷贝主题 + _mqtt.txlen += topicLength; + + //报文标识符 + if(qos) + { + _mqtt.txbuf[_mqtt.txlen++] = BYTE1(id); + _mqtt.txbuf[_mqtt.txlen++] = BYTE0(id); + id++; + } + memcpy(&_mqtt.txbuf[_mqtt.txlen],message,messageLength); + _mqtt.txlen += messageLength; + + _mqtt.SendData(_mqtt.txbuf,_mqtt.txlen); + return _mqtt.txlen; +} + +/* +**************************************************************************************** +* Function: SentHeart +* Description: 发送心跳 +* Input: None +* Output: None +* Return: None +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static void SentHeart(void) +{ + _mqtt.SendData((u8 *)parket_heart,sizeof(parket_heart)); +} + +/* +**************************************************************************************** +* Function: Disconnect +* Description: 发送Disconnect报文 +* Input: None +* Output: None +* Return: None +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static void Disconnect(void) +{ + _mqtt.SendData((u8 *)parket_disconnet,sizeof(parket_disconnet)); +} + +/* +**************************************************************************************** +* Function: SendData +* Description: 函数功能:MQTT数据包发送函数 +* Input: p指向待发送的数据包,数据包数据长度 +* Output: None +* Return: None +* Author: weihaoMo +* Others: None +* Date of completion: 2019-11-29 +* Date of last modify: 2019-11-29 +**************************************************************************************** +*/ +static void SendData(u8* p,u16 len) +{ + while(len--) + { + while(UART3->UART_FR.BIT.txff == 1); //等待发送缓冲区为空 + UART3->UART_DR.BIT.data=*p; + p++; + } +} +/* +**************************************************************************************** +* PUBLIC FUNCTIONS (全局函数) +**************************************************************************************** +*/ + + diff --git a/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/MQTT.h b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/MQTT.h new file mode 100644 index 00000000..e8350034 --- /dev/null +++ b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/MQTT.h @@ -0,0 +1,71 @@ +#ifndef _MQTT_H_ +#define _MQTT_H_ + +#ifdef __cplusplus + extern "C" { +#endif + + +/* +**************************************************************************************** +* INCLUDES (头文件包含) +**************************************************************************************** +*/ +#include "main.h" +#include "wifi.h" +/* +**************************************************************************************** +* TYPEDEFS (数据类型重定义) +**************************************************************************************** +*/ +typedef struct +{ + u8 *rxbuf;u16 rxlen; + u8 *txbuf;u16 txlen; + + void (*Init)(u8 *prx,u16 rxlen,u8 *ptx,u16 txlen); + u8 (*Connect)(char *ClientID,char *Username,char *Password); + void (*Disconnect)(void); + u8 (*SubscribeTopic)(char *topic,u8 qos,u8 whether); + u8 (*PublishData)(char *topic, char *message, u8 qos); + void (*SendHeart)(void); + void (*SendData)(u8* p,u16 len); +}_typdef_mqtt; + +/* +**************************************************************************************** +* EXTERNAL VARIABLES (外部变量) +**************************************************************************************** +*/ +extern u8 txbuf[256]; +extern u8 rxbuf[256]; +extern _typdef_mqtt _mqtt; + +/* +**************************************************************************************** +* CONSTANTS (常量) +**************************************************************************************** +*/ + + +/* +**************************************************************************************** +* MACROS (宏定义) +**************************************************************************************** +*/ + + +/* +**************************************************************************************** +* PUBLIC FUNCTIONS DECLARE (声明全局函数) +**************************************************************************************** +*/ + + + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/wifi.c b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/wifi.c new file mode 100644 index 00000000..c695a8d9 --- /dev/null +++ b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/wifi.c @@ -0,0 +1,413 @@ +#include "wifi.h" +#include "string.h" +#include "debug.h" + +#include "MQTT.h" + +#include +//uart3_rx gpio1_4 --j1_34 +//uart3_tx gpio1_3 --j2_30 + + +U8 U3RxBuffer[100]; +U8 gucDecoderIndex = 0; + +ESP32_STRUCT esp32; + +/** + * @brief User-defined read completion interrupt callback function. + * @param UART_Handle UART handle. + * @retval None. + */ +void UART3_wifiReadInterruptCallback(void *handle) +{ + BASE_FUNC_UNUSED(handle); + unsigned char data = 0; + HAL_UART_ReadIT(&g_uart3, U3RxBuffer, 1); /* Start receiving again */ + + if(U3RxBuffer[0]==0 || U3RxBuffer[0]=='\0') //遇到没数据,或者‘\0’补空格 + { + esp32.ReceiveBuffer[esp32.gucDecoderIndex++]=' '; + } + else + { + esp32.ReceiveBuffer[esp32.gucDecoderIndex++]=U3RxBuffer[0]; + } + + // FIFO 非空中断状态,状态为0则空闲 + if(UART3->UART_RIS.BIT.rxfneris ==0) + { + esp32.ReceiveBuffer[esp32.gucDecoderIndex]='\0'; + esp32.tc_flag=1; + esp32.gucDecoderIndex=0; + DBG_PRINTF("%s\r\n",esp32.ReceiveBuffer); + + } + + +} + + +/** + * @brief 通过UART3发送单个字节 + * @param ch: 要发送的字符( + * @note 阻塞式发送,会一直等待直到发送缓冲区可用 + */ +// void U3SendCh(unsigned int ch) +// { +// // 等待发送缓冲区空(TXFF标志为0表示可写入) +// while (UART3->UART_FR.BIT.txff == 1) { +// ; // 空循环等待 +// } + +// // 写入数据寄存器(强制截取低8位) +// UART3->UART_DR.BIT.data = (unsigned char)ch; +// } + +void U3SendCh(unsigned char ch) +{ + // 等待发送缓冲区空(TXFF标志为0表示可写入) + while (UART3->UART_FR.BIT.txff == 1) { + ; // 空循环等待 + } + + // 写入数据寄存器 + UART3->UART_DR.BIT.data = ch; +} + + +/** + * @brief 通过UART3发送字符串(以'\0'结尾) + * @param pBuffer: 字符串指针(8位无符号数组) + * @note 逐字节发送,直到遇到字符串结束符'\0' + */ +void WiFiSend(u8* pBuffer) +{ + // 遍历字符串直到结束符 + while(*pBuffer != '\0') + { + // 调用单字节发送函数 + U3SendCh(*pBuffer); + + // 移动到下一个字符 + pBuffer++; + } +} + + + + +/* +Function name:ESP32_SendAt +Description:发送AT指令并判断ESP32回应词 +param:u8 *cmd 发送AT指令 + u8 *respond需要判断的回应词 +retval:u8 0:成功 1:失败 +Remarks: +AT执行成功:OK 失败:ERRO +*/ + +u8 ESP32_SendAt(u8 *cmd,u8 *respond) +{ + //1.发送AT指令 + WiFiSend(cmd); + BASE_FUNC_DelayMs(300); + //2.判断回应词 + while(1) + { + //等待ESP32数据接收完成 + while(!esp32.tc_flag); + esp32.tc_flag=0; + if(strstr((const char*)esp32.ReceiveBuffer,(const char*)respond)!=NULL) + { + + return 0; + } + else + { + return 1; + } + } +} + + + +u8 ESP32_Init(void) +{ + + //2.ESP32初始化 + WiFiSend((u8*)"+++");//退出透传,准备发送AT指令设置ESP32 + BASE_FUNC_DelayMs(300); + WiFiSend((u8*)"AT\r\n");//发送一条正确的AT指令跳过格式错误 + BASE_FUNC_DelayMs(300); + WiFiSend((u8*)"AT+RESTORE\r\n");//恢复出厂设置 + BASE_FUNC_DelayMs(1000); + + if( ESP32_SendAt((u8 *)"AT+CWMODE=1\r\n",(u8 *)"OK")!=0) + { + DBG_PRINTF(" set up client Faile\r\n"); + return 1; + } + DBG_PRINTF("set up client Success\r\n"); + + + if( ESP32_SendAt((u8 *)"AT+CIPMODE=1\r\n",(u8 *)"OK")!=0) + { + DBG_PRINTF("Setti transparent transmission faile\r\n"); + return 2; + } + + DBG_PRINTF("Setti transparent transmission Success\r\n"); + + DBG_PRINTF("ESP32 TCP init Success\r\n"); + + return 0; + +} + + + + +/* +Function name:ESP32_ConnectAp +Description:ESP32连接路由器 +param:u8 *ssid WIFI账户名 + u8 *pwd WIFI密码 +retval:u8 0:成功 1:失败 +Remarks: +AT执行成功:OK 失败:ERRO +*/ +u8 ESP32_ConnectAp(u8 *ssid,u8 *pwd) +{ + + //使用AT指令向ESP32发送wifi账号和wifi密码 + /*方法一*/ +// u8 wifi_buff[100]= "AT+CWJAP=\""; +// strcat((char *)wifi_buff,(char *)ssid); +// strcat((char *)wifi_buff,"\",\""); +// strcat((char *)wifi_buff,(char *)pwd); +// strcat((char *)wifi_buff,"\"\r\n"); + /*方法二*/ + u8 wifi_buff[100]; + + sprintf((char *)wifi_buff,"AT+CWJAP=\"%s\",\"%s\"\r\n",ssid,pwd); + + WiFiSend(wifi_buff);//发送连接AP指令 + while(1) + { + while(!esp32.tc_flag);//等待ESP32数据接收完成 + esp32.tc_flag = 0; + + if(strstr((const char *)esp32.ReceiveBuffer,"OK") != NULL) + { + + DBG_PRINTF("WIFI AP Connection success\r\n"); + return 0; + } + if(strstr((const char *)esp32.ReceiveBuffer,"ERROR") != NULL) + { + + DBG_PRINTF("WIFI AP Connection fail\r\n"); + return 1; + } + } + +} + + +/* +Function name:ESP32_ConnectSer +Description:ESP32连接服务器 +param: + u8 *ip 服务器地址 + u8 *port 远端端口号 +retval:u8 0:成功 1:失败 +Remarks: + +*/ +u8 ESP32_ConnectSer(u8 *ip,u8 *port) +{ + u8 wifi_buff[200]={0}; + sprintf((char *)wifi_buff,"AT+CIPSTART=\"TCP\",\"%s\",%s\r\n",ip,port); + + WiFiSend(wifi_buff);//发送连接服务器指令\ + + while(1) + { + while(!esp32.tc_flag); + + esp32.tc_flag=0; + if(strstr((const char*)esp32.ReceiveBuffer,"OK")!=NULL) + { + + DBG_PRINTF("Server connection successful\r\n"); + return 0; + } + if(strstr((const char*)esp32.ReceiveBuffer,"ERROR")!=NULL) + { + + DBG_PRINTF("server connection failed\r\n"); + return 1; + + } + } +} + + + +/* +Function name:ESP32_Start_Connect +Description:ESP32开始配网 +param: +retval:u8 0:成功 1:失败 +Remarks: + +*/ + +u8 ESP32_Start_Connect(void) +{ + u8 ret = 0; + if(ESP32_Init()==0)//ESP32初始化 + { + if(ESP32_ConnectAp((u8 *)"WZW",(u8 *)"12345678")==0)//ESP32连接AP + { + if(ESP32_ConnectSer((u8 *)ServerAddress,(u8 *)ServerPort)==0)//ESP32连接腾讯云服务器 + { + ESP32_SendAt((u8 *)"AT+CIPSEND\r\n",(u8 *)"OK");//进入透传 + + _mqtt.Init(rxbuf,0,txbuf,0);//初始化MQTT框架 + + ret=_mqtt.Connect(Client,User,Pass); + if(ret) + { + DBG_PRINTF("MQTT Tencent Cloud Success\r\n"); + ret = _mqtt.SubscribeTopic(SubTopic,0,1); + + DBG_PRINTF("ret=%d\r\n",ret); + if(ret) + { + DBG_PRINTF("Subscription successful\r\n"); + } + else + { + DBG_PRINTF("Subscription failed\r\n"); + } + + } + else + DBG_PRINTF("MQTT connection to Tencent Cloud failed\r\n"); + } + } + } +} + + + + +/*t +Function name:ESP32_Control +Description:接收服务器数据,执行对应功能 +param: +retval: +Remarks: +接收服务器的数据,会保存到exp32.buff里面 + +*/ + + +void ESP32_Control(void) +{ + + + //服务器控制开关电机 + if(strstr((const char*)esp32.ReceiveBuffer,"\"OpenMotor\":1")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Motor Open\r\n"); + + + } + + if(strstr((const char*)esp32.ReceiveBuffer,"\"OpenMotor\":0")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Motor close\r\n"); + + } + + if(strstr((const char*)esp32.ReceiveBuffer,"\"OpenMotor\":1")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Motor Open\r\n"); + + + } + //服务器控制电机转速 + + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":1")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Level 1\r\n"); + + } + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":2")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Level 2\r\n"); + + } + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":3")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Level 3\r\n"); + + } + if(strstr((const char*)esp32.ReceiveBuffer,"\"SpeedControl\":4")!=NULL) + { + memset(esp32.ReceiveBuffer,0,sizeof esp32.ReceiveBuffer); + DBG_PRINTF("Level 4\r\n"); + + } + + + + //上传速度值 + + ESP32_DatatoServer((u8 *)"Speed",50.0); + + + +} + + + +/* +Function name:ESP32_DatatoServer +Description:发送服务器数据 +param: u8 *mark 功能标识 +retval: u8 *value 功能数值 +Remarks: +接收服务器的数据,会保存到exp32.buff里面 + +*/ + +void ESP32_DatatoServer(u8 *mark,u8 value) +{ + u8 message_buff[300]={0}; + sprintf((char *)message_buff,"{\"method\":\"report\",\"clientToken\":\"v2179483179IgNsi::h6-Td$aDz\",\"params\":{\"%s\":%d}}",mark,value); + _mqtt.PublishData(PupTopic,(char *)message_buff,0); +} + + + + + + + + + + + + + + diff --git a/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/wifi.h b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/wifi.h new file mode 100644 index 00000000..902648ae --- /dev/null +++ b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/generatecode/wifi/wifi.h @@ -0,0 +1,71 @@ +#ifndef __WIFI_C__ +#define __WIFI_C__ + +#include "main.h" + +typedef signed char INT8S, S8; +typedef unsigned char BYTE, INT8U, U8, u8; +typedef signed short int INT16S, S16; +typedef unsigned short int WORD, INT16U, U16, u16; +typedef signed long LONG, INT32S, S32; +typedef unsigned long DWORD, INT32U, U32, u32; + +//三元组宏定义 +#define Client "D5MLGDVORYMotorControl" //ID +#define User "D5MLGDVORYMotorControl;12010126;IFCJK;1745908540" //用户名称 +#define Pass "5eec1815a1400df602c3d26ce4b3e60a3c89d164428a77720b64a37969cdbde5;hmacsha256" //密钥 + +#define ServerAddress "D5MLGDVORY.iotcloud.tencentdevices.com" //服务器地址 +#define ServerPort "1883" //端口 + +#define SubTopic "$thing/down/property/D5MLGDVORY/MotorControl" //订阅 +#define PupTopic "$thing/up/property/D5MLGDVORY/MotorControl" //发布 + +extern U8 U3RxBuffer[100]; + + + + +typedef struct +{ + u8 ReceiveBuffer[3048]; //保存接收ESP32/服务器数据 + U16 gucDecoderIndex; //决定接收数据的长度 + u8 tc_flag; //传输完成标志位 + u8 time[50]; //保存时间 + u8 t_len; + +}ESP32_STRUCT; + +extern ESP32_STRUCT esp32; + + + + + +void WiFiSend(u8* pBuffer); + +u8 ESP32_Init(void); +u8 ESP32_ConnectAp(u8 *ssid,u8 *pwd); +u8 ESP32_Start_Connect(void); +void ESP32_Control(void); +void ESP32_DatatoServer(u8 *mark,u8 value); + + + + + + + + + + + +#endif + + + + + + + + diff --git a/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/main.c b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/main.c new file mode 100644 index 00000000..d196b106 --- /dev/null +++ b/vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/user/main.c @@ -0,0 +1,74 @@ +/** + * @copyright Copyright (c) 2022, HiSilicon (Shanghai) Technologies Co., Ltd. All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * @file main.c + * @author MCU Driver Team + * @brief Main program body. + * @date 2025-04-27 14:34:34 + */ + +#include "typedefs.h" +#include "feature.h" +#include "main.h" +#include "wifi.h" +#include "debug.h" + + + +/* USER CODE BEGIN 0 */ +/* USER CODE 区域内代码不会被覆盖,区域外会被生成的默认代码覆盖(其余USER CODE 区域同理) */ +/* 建议用户放置头文件 */ +/* USER CODE END 0 */ +UART_Handle g_uart0; +UART_Handle g_uart3; +/* USER CODE BEGIN 1 */ +/* 建议用户定义全局变量、结构体、宏定义或函数声明等 */ +/* USER CODE END 1 */ + +int main(void) +{ + /* USER CODE BEGIN 2 */ + /* 建议用户放置初始化代码或启动代码等 */ + + /* USER CODE END 2 */ + SystemInit(); + /* USER CODE BEGIN 3 */ + /* 建议用户放置初始配置代码 */ + + HAL_UART_ReadIT(&g_uart3, U3RxBuffer, 1); + + ESP32_Start_Connect();//开始配网 + + /* USER CODE END 3 */ + while (1) { + /* USER CODE BEGIN 4 */ + // WiFiSend("1111"); + BASE_FUNC_DelayMs(100); + ESP32_Control(); + + /* 建议用户放置周期性执行代码 */ + /* USER CODE END 4 */ + } + /* USER CODE BEGIN 5 */ + /* 建议用户放置代码流程 */ + /* USER CODE END 5 */ + return BASE_STATUS_OK; +} + +/* USER CODE BEGIN 6 */ +/* 建议用户放置自定义函数 */ +/* USER CODE END 6 */ \ No newline at end of file -- Gitee From f668389ce49b5186c264e805049669a1372091ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E8=80=81=E5=B8=88?= <1161625498@qq.com> Date: Wed, 14 May 2025 09:49:14 +0800 Subject: [PATCH 2/3] add demo --- ...5\223\201\347\256\200\344\273\213 V01.pdf" | Bin 0 -> 332848 bytes ...6\215\256\346\211\213\345\206\214 V01.pdf" | Bin 0 -> 2258446 bytes ...0\200\203\346\214\207\345\215\227 V02.pdf" | Bin 0 -> 12179148 bytes .../1025_Six_Step_Wave/readme.md | 20 + .../E7050_Six_Step_Wave/readme.md | 21 +- .../E7050_oled_ifd_sample/readme.md | 56 ++ .../GIM4310-10_Six_Step_Wave/readme.md | 20 + .../readme.md | 13 - .../Infrared_Receiver_sample/readme.md | 42 ++ .../mpu6050_oled_sample/readme.md | 30 + .../user/generatecode/feature.h | 120 ++++ .../user/generatecode/main.h | 60 ++ .../user/generatecode/system_init.c | 215 +++++++ .../mpu6050_oled_sample/user/main.c | 92 +++ .../mpu6050_oled_sample/user/mpu6050/kalman.c | 102 ++++ .../mpu6050_oled_sample/user/mpu6050/kalman.h | 31 + .../user/mpu6050/mpu6050.c | 117 ++++ .../user/mpu6050/mpu6050.h | 52 ++ .../mpu6050_oled_sample/user/oled/inc/oled.h | 46 ++ .../user/oled/inc/oled_fonts.h | 562 ++++++++++++++++++ .../mpu6050_oled_sample/user/oled/src/oled.c | 412 +++++++++++++ vendor/yibaina_3061M/oled_sample/readme.md | 26 + .../uart_it_Indefinite length/readme.md | 21 + .../user/generatecode/feature.h | 120 ++++ .../user/generatecode/main.h | 60 ++ .../user/generatecode/system_init.c | 132 ++++ .../uart_it_Indefinite length/user/main.c | 130 ++++ .../wifi_tenxunyun_mqtt_sample/readme.md | 31 + 28 files changed, 2511 insertions(+), 20 deletions(-) create mode 100644 "src/document/datasheet/3061M/3061M\347\263\273\345\210\227 \344\272\247\345\223\201\347\256\200\344\273\213 V01.pdf" create mode 100644 "src/document/datasheet/3061M/3061M\347\263\273\345\210\227 \346\225\260\346\215\256\346\211\213\345\206\214 V01.pdf" create mode 100644 "src/document/datasheet/3061M/3061M\347\263\273\345\210\227\346\212\200\346\234\257\345\217\202\350\200\203\346\214\207\345\215\227 V02.pdf" create mode 100644 vendor/yibaina_3061M/1025_Six_Step_Wave/readme.md create mode 100644 vendor/yibaina_3061M/E7050_oled_ifd_sample/readme.md create mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/readme.md delete mode 100644 vendor/yibaina_3061M/GIM4310-10_Six_Step_Wave/user/mcs_sensorless_bldc_six_step_wave/readme.md create mode 100644 vendor/yibaina_3061M/Infrared_Receiver_sample/readme.md create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/readme.md create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/user/main.c create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/user/mpu6050/kalman.c create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/user/mpu6050/kalman.h create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/user/mpu6050/mpu6050.c create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/user/mpu6050/mpu6050.h create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/user/oled/inc/oled.h create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/user/oled/inc/oled_fonts.h create mode 100644 vendor/yibaina_3061M/mpu6050_oled_sample/user/oled/src/oled.c create mode 100644 vendor/yibaina_3061M/oled_sample/readme.md create mode 100644 vendor/yibaina_3061M/uart_it_Indefinite length/readme.md create mode 100644 vendor/yibaina_3061M/uart_it_Indefinite length/user/generatecode/feature.h create mode 100644 vendor/yibaina_3061M/uart_it_Indefinite length/user/generatecode/main.h create mode 100644 vendor/yibaina_3061M/uart_it_Indefinite length/user/generatecode/system_init.c create mode 100644 vendor/yibaina_3061M/uart_it_Indefinite length/user/main.c create mode 100644 vendor/yibaina_3061M/wifi_tenxunyun_mqtt_sample/readme.md diff --git "a/src/document/datasheet/3061M/3061M\347\263\273\345\210\227 \344\272\247\345\223\201\347\256\200\344\273\213 V01.pdf" "b/src/document/datasheet/3061M/3061M\347\263\273\345\210\227 \344\272\247\345\223\201\347\256\200\344\273\213 V01.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..7d0119000441d0118177240151d976cd6fd5d0af GIT binary patch literal 332848 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%0AZmq~e{LVR&X` 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�ST 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
    qI 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 literal 0 HcmV?d00001 diff --git "a/src/document/datasheet/3061M/3061M\347\263\273\345\210\227 \346\225\260\346\215\256\346\211\213\345\206\214 V01.pdf" "b/src/document/datasheet/3061M/3061M\347\263\273\345\210\227 \346\225\260\346\215\256\346\211\213\345\206\214 V01.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..2dcee0bef1638c115c13e18e75ec2e432a34a1fb GIT binary patch literal 2258446 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

    ^vY)@t+t`wn98VW?a>F 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

    toxyQ}*&SlI)k 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 )Z#t#b?7-N@d2bdN@JSDUTstyx3M{V3C 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�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
    RFK#+G@qSX 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 z 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%0A)t(tAZwnrhdWMrXTk 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%0A_Y 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 literal 0 HcmV?d00001 diff --git "a/src/document/datasheet/3061M/3061M\347\263\273\345\210\227\346\212\200\346\234\257\345\217\202\350\200\203\346\214\207\345\215\227 V02.pdf" "b/src/document/datasheet/3061M/3061M\347\263\273\345\210\227\346\212\200\346\234\257\345\217\202\350\200\203\346\214\207\345\215\227 V02.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..ec73036f0fb16e4ddea550377ecebee55f96f294 GIT binary patch literal 12179148 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

    YaSP87MU>$8w%d4QB26}*lU5LM)NH%@`yxfZP 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

    N_wo{ae<89x4yA-y9O}CSViG&GOs!bxCX@Wp$- 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ʤ~d7ZMNo^Fo1o#jwZ|Q?L3# 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�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

    )5_2eS^cNfC>P#rQGZ$#x$yYBcuxR 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

    <0= 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

    vX|5ftm{3L%Z4Y*s-971(S!YYwTE25K>tR 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 Xp&Bpnb( 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ᣝ=!t-M#wm>vzbeo-8VkfX=OUtduNz5%SZm=kD~* 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

    ^e@6eCQ((I*q)g!l}F4pzI%#0aO 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

    WR8l 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̘XM2aDT7On3|ob04Gdd>Vci{dQaYzgLlv_$vGE*ES9LG1t+d1~Z4M6cvT!r7}scAaN_Km}NA*XIZz~ICmbZ#ywYLo*B63 zz@lNt${d)4mn+3%cgHJ11n`iu3@-%6WMHDt#5ff9^o`NxF{cdm3XGk@Mh$~jW8@$@ z5hNKf`eRjOWEbvfAloBrEl|&j+lgx@CGItpV8{em#)Fjp>e#sHi%zRs=!+)Llu*rY zHv8=$9hRblfeLKhK~mm2zCt3|Kh5vVhYK;UP!+^rrs*RFL2kgJV>f=B0J>_B+qgHO z8;q*8g4v(moR{gfo+M`O_Wju?n^U00uYNPr8Vy~xo68+fE-8?!ou#ewc{lvDe#A;w zJ4TW>e?%@8x)|9ExG;V3FT%o{hp`RtaBzK;{Q<2Y8T`3vc4q9?)yqrq92FibT7f_W}U3HThddbpAETZ$vV?7vFtVgA@y}Ubyk6I@#NE$}ebL&lyHGr?&y&SnpLf%5 zLB#1Vp?M2oI4Xsuh^&yS`|y^JCp29zXYT`CF5j>7cR+B4hz*l_xLs(H$!xA1(3p zfUGy`-m5(h)hD;!VS|h^4~Mez_OKHNdFaVJw#KI*Jr#CbCYr#B_`1NE6{!cB%&3@q!? zKyq(@afM;RSd(kr|y@nZq^I2#(CC9OJuJEsd$q*H#j=8aQCB z6f#L+mj>=Enx~qCYuYqDf?4}-*4(O=;&eP6WW^50k1J;Hh>1)7;S4t9uplCt4(*vT zJX<7ZG)GQva{X?b^g0W(i*7QdZKdBusZr~lQQ0-_oK3PuVeD91cl*Z(ICkmbMa&Bh zNWiHqgu^(&pQI%2)KO5#3B(pAdg!G6B7ObbEM@ZIg2$U39DRW3?V9Z>pKqdje0d0RU7IAPP_ zenD9hdbwvJaS4Pbty{a<(K$=pMI1GczI&1-kME=17bn{f_f*zkAem;^M z2SwE6hK(C)`27khtaG#ZM#SElK+C5=NsiBKUe~&;>j(AR0{5Y=K7~F|iukl&*10_G zkDa0i5R!3O$vvd5;0-@#8gzloljw7J(zD3t!nnP4C)k}G+S-B{Zu8KSck!PC>ZRt^ zD>SU~9t2K+%X0X=F-$MNdzO^E7CnREWqcmRTe)4* z3OhF3hPKtd1D`}??}ORS8UGa=y17kUj!;hM2ls5GXr=fB@#5fPVe2;d`3|21{56-4 z>=Fv|J_d(s1I^&3B6SeAFa3Fq38Gcf8joWmFBtfB1N#4td*o7B*Y@o>zTubzZS9)S z&lU@O85*1-Z@oBWoFfUXKOD)&ON@nz;4MdXF{W{*-27#H*k34iS@Dp;#QU%+&;05! z(VBP9I(OibSCo`z$$y>m{~AS0bS%*WADDeZQ!UtE3n{6FvhmQ#oI#zN4Z|^`Xg^wjgzd;38M?HKHf_XN_m~I z*WOts1o;@>tw|nushQ%dY5~ja@rfUn1)^%7=$R1D+Sp$|LJL&Z&M&awQ*N%Fnt_M$<)s|)fUJ(Lp~_9z{xq$wcqQ_6fK!$ zJ9Y3{{$7YW-~|NCPQ5kQ++#%h_L3OXj;~QWJRN$KT{T~fO|{d|pwGbd!Hnr#&mpb;>3Na4kioADIy6BgAWU||&MbrCI)G2LC`e4OugL3s*}bW)3#i|NqE&7}&s(nz%+BkNE;>Or3YTAPuP@u*em9-XVT6XQv^?e!5njEvsskqZ#R zQDYNqOSVcVs4U+$Ae7tG*!`&2pNUj+H|7ZN%ajfE7CpquFcN_Jyo;iw&Lp@zXX+U; z%^WU0*;koCgsF~VNxliJZmI(vmgLwGEMtKYJ=1RlyueWaG$P2o)&iJ$Xu%ShX<@}K z$a@h~U|6Bj=O0i3#d~UD@0rY}`BDpJ%=svtIjoHtsKaI6f8TSG zt$rbE^@Ckcl4nB|sJ+9jr&s$y>Lz60YaHZ<36g-t(t-Tey^|s?=!K|99{+3XYgnSd z#P3*zoT~IA3WH?n4>H@{&vTt5=BQHFpDNf8L9uW@2vdusW^ctS!^7W{td(#XJ6W3y zf+%K@8#@6Z=Vp;LI0=Jpq@YzW#%3gwFxZ3zO{iP-up?qJkS5|Y+2IG)OkYK5%K$st z`790u!DMD|6fYg1XFrxIJO7`l868bv1(6Y9JQMRW1UO?AC`cnhj|$fgu5SUIX+2u0 zEU@3&j?fMURO?I739+q!W^4lsuNW2jRiLd97*esKKNYoYapu>zGz%ItL$n9gV}GIu zQ2;bO!Kq4364%EO@ZkZ$H{6&4fkoEf*02>OCQ8X1-c9IcQzneS2}zh2Jcl(b4PUdw zY=gQ&q@c}#YNTLt7Zu5TN*;0$1t&=nwGYGZADxoNSi!<+^vL9?#4@;wQNrS8&*&J? z0b$#!NHHK&iS#7J7@o(Frl_48o~+;oNyd-^wFCZG+uCyR`_}eCtItczc|;wyZG|nN zK=eG&dQ{R{C&eE}j4rPGBfGlCUh6)Rfz&*z zrhREWR4vCaT@r8(?*~rSXfA-WD$aNfH_8ICiTZcJYN+IZD|=$KKUNh&7VY_V34+EM zxE8m)JU13Fy^UE6R1%(TlXawCdJNc=Jd+Kino~6GH@$)`Ba$s(Wr~H{5&C=HPoU}4 zdcK??Q6iOk{H^~NpB!OO)JTp&n4h!5!}WeWGBR;ExGLlUB_9WwKRy840ud4LypuWQ*sbD%7~&DEp%kB|6E|~ z_rINNcyL%oiJ&1+Ay6SzUOG-7qv6$?d>zYO)DF#3AYK2VZ#r_UU#3>hr36@B95JKJNpV)Z>4j{MJk{4=7QNbwH%iX6@tc;#*2Y z@x2|vVql=($+ej4>-BuS2R}7HvyOMM*wf7u@Q9~BiqFp#2yi0~804Q6NDZj?bZX8Y zV$v_bpgRfMB{_CI)ng#4o%{axaS*=oo{HRW6@hg+XP?2k_}eQmf_Nd}nZ|t9g)jTX zMu;Ab4>$U9yBcaOGmE@jy1HQGIPZDdrN9ZhrL(8>88dK5Xo>n4rUALDViq{vRKWrU zpuh{UCEb_Hdz%c$R_^W-B4gco{IAs-ziW6Rs1cdPdTmp?EFUMDv8*&%^wdy$^m#8!=Zpm`(EzVkBD3b8S6zs1bfS#5S7zs+X7d}Vfv zvr!@a!Rh9RmzRFJtvg-pL8t!BsV;C~pBtfWX`eebFX02FrkoGj>O{8UsY})cuLPJN zY>m5g%RJ$fbi;03Gs_}_XCPHy?LNST$js>QGix{#ZA$I0;79 zt8VKkv>(U%=}WpAa>wk$7kCrB^yQstS)0tp3>H>(r6&u@FB*i&>qkf83_P6!)p0xy zOQN|Zop(vN?44TC@Nk#ro_FxUH?3aR6k&VYC3r5(=)U!Z8aq|n9abm2_q6fy2@<2J zD7&a}Esu}0=e^wuH=l2p=jY||(*S*p`mT&jEe2duu1Ne%)VgC(aVrwQnOB>79@w2p0|a ze+trrxZABOS`cY&u)K@bI+OGsxNCS-&dzmCG4osLhbF7z*PBb_YXtXB{!MEs;*y`~~CAi04$E-?d^gO{=j%a3i-h97p(Yl4~;HA6x>BM+& zJ!yj3_@u=f@l(Q4d|*>gdRqH#wL4W#1SUeKgh4N-Pe&`0jzMp``$ql5b-j6Odn~`-XCuR2b%4mKwMS=$65kBALt)C;XugG*Bemg z9 z^aUkVoVr8=6RY0W&2R?X;ry}MQ~xz<%N8ZmD~>FurcOOoFjJ}zX<3(}q60azdz`n! z+U_ptkFEOU(7^9x|C(^XeCAodY~{vj>79QN;ZX4y@OkD-fTs|0=v88{dq|dL;Is6UF2;!n7h4o)W%KsC?{{OQe$^IWGtp6W{ zVU5<6J%+@O)Hky0{%48QJKqg)7+5gnH)6rRaB9LBa7W78%7Vyb{|2_6Iyb#}d4|+q zNIlp^Cu3W+@(&y1f&P3Z&J#f)6#*#9j6>jWmg*o!-gLq7yEPC4D>m4{UzpKE#>~;g z&aDurxYF(k%{%ERzaq5=ej<=VBU^wT!3eKN2ikWrfg7`*$l_>JP*hW4=z)lo7+0~3 zj+>JhI)@8(<)qM2EIye!6e_AFBgCY{7D0+kiYxD=#5RYCOj2m>q{xl0uLpSyZ2w$I z@m>j$X#C0QvP%iRB>FFKv~1%ps7i-kicOb-t&@cDA9`#Cq^~$_*)N^C4HPp{hmIm! zvZtyhC%rI=(P$QSCH6w=6Xgy#ack+`bYjDnpRPMXA}VODL<3vY^TeTsUV>pi7K$^4 z+|OOweG8nxtgSsk1df8%n0s4vNr+z3cr+ zR(zh8vP~P&DP=i+Srk|Uz>1{6m58eu7ci0SF#5&4Q%Ar*1)e+c_VAZ%*r5J1+Cyq&b5MegFB*H z;f7{jRkKWMMuI9k+o<+;*yVkDl{(mqBfz{8T_AS$e!TTiQ(=BsSQsi^DQ~|hmPo(h z=k4$DX#BcZrE{qw6~D<8kI_aTw=b%>z7AZNrA~&VG(h;+hjGobw0F_n*QVSbOmMM| zaf(UAAx&QopPSpO-RtiMy*9ZW18MMf@p1<( zzqp?pv%n%;JvNXJ$V)?t7LWxx?B>!AlmB9a-){P2PYS=eWidy;>eFM!j?2tep8T}& zYEKE^6YEX>1qs0JR*GN(^yGB)+%1%lasXJxd&PXf-&MSrn4}Q9e>6@ZTQKKnA39f8R`i`dV^_i3?`$o9+!o&lZj7C3zs>h404=g zL&xAY<1ym66=ZXC3@o(BWZ>*8=Q|CuZkh0@^tdAd*7eP=q10StoQqq&mi7bm3 zmXNI+Wuzc&S*+`r#kU~QjN7|h2YEk@L>Xr+Oo`upul>dH-w-|88kA1?1xbJg@0us? z`k1GsNIIr2D?c}hcJV~eI30p-@`MA8JY?S^G;)xlIZ41`W^8PghkY>)XLD;~e{-@^ zkT96j8km8m)z=A9cFP;@otWTd<9wR&mFoEPMC? zbN)9w@BS~2MzOnBvlj0D{keYpoDHKmgm~O&g{TBE(TSDDL?zOYHuGj>!2`7DpChCy z8xW7O7--TJsx1`W`dGPAZH$lFeL7Cr=BGL7K&jx04k+IHBwH^JYZDRk4MMB7nqU}m6OVW}N3SLOgfCodTbCLi{ zM@bA@3t^rHTZ^u)Dh`h6g*yS=#t0z=CZBO^38KhJMiODS0Rp8ZBmFX~mc$+sPb=?a z3a2CmN)qNk-15_uu8d-{EHPXZ+ z5fBqG?2G@25R%X`6hd1etYz3FouoPL9rzPFHfNhMu?FxFp&^w zh@t9=8qIG-&9#ta;hfo( zg`&Wrg`+R`1-Zz`8+jqsaC$;XSj`r^){F9_$GGl&k z#VnTeb3V>^B$X;1o${nillBi4>aX;KuUA1bx4Se1L24rX`^x%GB}wUIl%K&LQMwZR zd@F;#T z!cmV-Ikiqq$QaD77H;3nj}HDIQSvqHZ2W?1K=BwvUm=_o9rCC5RrU5Rz%-{^s$72Q|WVY zeFxXXZj?;koa+cizZe|ysa?t(>>5ual~rXH`gElVuEUKYIjNaWGn*^3=%?c$Z5WRj z?E>x=?y1LKe`~wb*I~C0?iSMZm4VmoXl-wP&%N}PoHdTSPpKp^cxnmZGsf)Z z=uX9I5}!e^THC#y-d-?Xj$6xAWfn#K8^uY@V&i!W_Wn*&me4ku`q~hDE01_VU2~|& zp*qWQ;se{^O*Cb2$yh=<4s?h}Ij9T@kqnxU$9KB&{uXQxY~jgs|8sE>E34Ask^;ljHY&iKK&3j>R%YC($Z$7(#5*U56hMz6!jfYbB*AUV2Tf6K6~FS+(JvTtO-Oy)bo;0*I&zk2$YJM#hK zZ!1KsXE$g-J>W^cceiql=gGTV|7Q6j*PBnXG)FlK^nbk?d5r1xxd-5|tu=eS^Ga7e z`rpA%RJdP#y&AmEpZz(%pF+}U`b~LW@!|H5x=NEl;2ldEaq- zZ+a(ozL~7(aMJgV$cyj!oVH$ZWU2r#t!}PUx8ei*?Hz7gwr3o_7k|GjJ)aVOolX+E z_jTN-<|>RZVqJ}B5Pm-`@btgkJR2bD_kDEJbw7;6`%h&YbJnKVy}-69=znZQUB^jB+P9h|#_D}KWvjQ$-SZQ1q@}}Lx}3_cUrG`Sv5S&-I8^*@;(s!2)~;{( z80+N`mVoa6o~1-EEzrkr|N}bD@8^taO;*9L-)y{m~@4*Az`PveuLZCMczKD4r@W! zq6ovRU8VR%&VK!b3f4d@vQwD7_Eqds4#Q|Mkpe@Qtr2E9m;Uqvu?}1OQjR?@W-i=> zgBAb?@6aFN^r}|gD`j-VOd-_v56Tz1@X6o0t8-m3I2Oi&%22Gnm^ zeUM$9B#S4>?+cb&7O1d}FBZDLZFA*x5}U=i~M;2z(r~=Niy?M6LM7KsIuV+3x!S~g%hD|I-)eZq*wRnbOXJu zpC~VGTOT=ok#)oCTLUL<8^0Pt-M}F0`fX3M!r8l0`9cMYr7PeHxZ&ck-ifHt-MU#Q zyE|c&;+St6vGS&p5Tdse*+NSaBDE3W<{)(bbshp(ix_@Q_yDI=*)v|ns(B)|_0s@s zss=QCz7>UT6b-+HFazGtFA8mv?*{&^Mi@8~YEnFXwgruya@EjkRiN1}!?FV)aNUAq zxd+5^4U6R)P*`yaUwB1G;h!|=!gcc;Yasaq-0!iu{rBkPFJ43_%Nvu7+f|2-9yLu5 zyrkPjBkG=cIuY7CT{;{?&!$n`%zsy)6!q5&4$IFOEFX10**|Yx;STyzCJ+#EVe1y*XhI-F{4{ zKXGM@Wn(QT9Qz@v9i(wG)?PgR09@HBQoqyD7-mAjxd>JAwpEV|fLw&UZ4?+5j3kX& z6*#e1a9m-!I95LiJv`9+|8#ZJs1IRT_QC}4!n@^#8Et30v(9XdJ+M7`MVV{YK3#b2 z{0CgJWD*YizuJxb4|xgyPxCx82giR4mz0Yq0AkxYgZ8I8;~h88udA->enq7WC)yG< zHp-z-2(MD?A_LW?J!z=)k~#m3KG41(p{JMBmU^2n-B4>S+f9K5ApmrliNl%24P@7>TR~~Q-xZY)>R)_8}LZ?}LTOoZ;0{H; zE{anC=%9#QbOn|diY|*_DTR(8AVQ&rR)FD<4<^_1MkJVAGa9O!b6F6GU2beWA?9!m zQwPtZ+$d-YiRr`yutW35sxDW1q)!4{Lf1X2toTV>Rzotc%!*>kwWVEv(F;E~F`&c( z#fqW>uR!sX4$$w}Wm@Tl=%uZKMiY(o`iJ$TUGXMiTJ)tFz?W8PifPD~tn~+aBwKT$ zBD4^MwXqfCfJ&YkDpFblZlRIEnj_)R&~hC_!i+NPDCLjZ^sFNhW~7!X`k1W**u^vy zUQpWO2^AQfj}AzStxvQdjkgGT5JgGe$kC$dAI40IwpPf*qnQlB=`KthDp9>?Qptfj zl|8emGe0>+-un-O;8+(0S>H?bg(O5xIyEQ&f|+Wxy@%JxrW*R*(SmIUgB6iMQd z?OLpCQZpzi5Sd|1H!t1TDwzEVi7|P};4GDSNp{!lxy9rxb?1)As1>YdTW2M+4CXA= z*dx+0F5Il`97f4!eUvmfaS29;JRu@q84y)VVfJC8v`+4IFTrGIZgC zj>*Kug_K~Fj+KwKG^%RS2RoGFHHlMc?6WQ(qO#du8|ynZT>VDqc2_lYtHCd6>MVnd zfpL6Bu6A$@GgDLan8Bk<3D)?AsR50;(sv{2jfvv6;#5_d^th@SISc7n!M6AlXiAu^ zW}!O2j2j-c{bKZyBG68KG%7oF5s#)W6($a&os6$q(@AV7pVSJrbuI{(0+?LrVE1u zL&w0W`9u%7eNtL!9?sdQbqGVl5&ovn=kCH{wMF*&?uLP2MH`Cl?kzT%e&otns_& z^$4F0-2>2<#t^!&R9tWBavWu6B(Tmy5#QHOf z_P>QX6eIoGEugtK&qJG%ZG4))vtxZUvpzFwU|%UGqT^IfcTTq#E^objGBQi{O&3mo zwm%zsM z1YR9^Q{dG(9Dd=vhpRwQPLu`Ep1Crr#@G;sqBWunm~imAw`)%5*>CjCjARG>&QN6ywQi7h&th8mjoY)Dg+BL%^+fn6GhS)?!omBzH`YO6@bSfu zy4hV}-s_=H&%tj37uv()xb)@h2y%-l{FnU`{eKG9X$#KU>~J%IkXR-%ASNa(+Ho`Dg+ia)*R~?0IREQY7`Zn@v@eG+2U~6NbC4Ht zYDEC+YTUlzBl2|HMK}KHmrShV-T7mE-LxSH?d6JBo#}JONtq%u?gC%hoOz3mXFHAu zy%7}-y|!R+iMp`m1E&|9d1gCEIr?r)*=XqZYQZ7(`8R%4?Q*Twe@yGojQMXvzSnbj zodMrw*19J;BNP$fae1@y6o$17Z$=p)Qr)@w>Em$13IRJdPui{g55+Sk_$njS;j zb2R3SAzDuAO4l~|r-{$Gq|;u@@Q7|YRlUbDw<=xr$!XL}N6@}PsuR*exTu%(B;qa1 zTC~PqJh(Gu$}3uYCsmMAsO(E?dlx;6dnzPPUoUj>Nkp*Y(nY#}5QyyXG!?N?8lNRp$S8v_TD4Y85wv-OehS#RG?s+sD!Z%04w_7rqDOMc!^J_1>9~BMOYP`7a z%si7KMp$Ks?>yM<+vWO~l`KbRcE zW9X4l-IwG{I+`%nc7djs653hVRqlB9T^X~5UorV27AhTXRLlf{Ez~WZD^)GlYW!Gb z#2fB|nr=T{|54>2F3mq^U8ZBbH|}}M^5K*jNtGr@47RMqFplONhn_MX++h`1)N%qv zakY_Geiz|9X$d3_BdzKGw$ekyoK88@3g7mF4iO@}BgAs$T6$8(4~?|d!&a-Fmldkj zUtNrF4tsK0(aRF!@(0fuOY@%2PVV1;r;6jnDQhV~9Z7Tm)Q-;oborGp!u#a_k+rI+ zM!FH>d67@X7)ws}jO+MK^9KYaiH82a3Z4HabcO!|ILZFs8OhdY@!8^up^MX_CXjen zl>It!G@s(wOtGiI~xBmM=#lDuiAlie4xfCCG{{Dai`#z;IPm zR3w4`Ci20Q<2W4b^BFi#x3Aa3KD}OMUV6O(n%m1`nS!0l{??n)gN}r%MY1OA5;4nG z1&%YHMEKY0b+8{hI>oreP@^_%g z3g^MvF9_j+K&gVphbeZ9!v@NerpQVLB_Xntq6uuHNtaba6^!L_O@*?qGiMyRFUWmlc zXvK98g*Z?7i|7m!fhcK_X4@R3_0Pfth&6Em&WAd$7bdNWu!$=enT)h6K1sQ%v<-}` z6^dU&16^t2z#t#SA!?!NBme?~Op5}1MpclKE&^T`Ce(0LqzO{`FPQLpO$!dOt|GPl z?&vR@ASkCs#PL9?2TPj3oh(xjtQ_&yp9=My!pLyELW=Oj8{X#s5{MZ|8T&Aw?Ml*M z3V)`GGLKWKS_Vg9UnK>ZuY;lBK!s)1X+yQ96@X{3lL^g~-%2UMgS|j~33V*sk5|e) zA$wgia!WIYSN1l~pXchZZgP30XrnY)iABcan4>?ZSvb6J z_)~qK-+1PQg}(w|H)s2v&0UtIk)hbkBfr01UbjOHw$7GasR9Bm^tzw39 zX((TRsobCuw}<-$&? zzw+QlR0=)05qJ@Z6wr1~#rN+FpH{Zo8T__i``!;f`;9qeHy-PxaU^~@JgT!}wyXPq zZMafw9S&UMlQCzCZrR98;ogv@&OBE>h@95a*!WuCetZZ#l&j-NUNBp|%7G%uM&tP> z%vp4Ed4m2Hra)=?ee9;$u*w&!uAp{P2>@5~E2u(JeG01LS6qSij)P4@wt`rMDHZoc zWk?*q&Ug(w{E5u;BeMNz(EIPx)Ho@N7XcDI{iD0=`^W&(kxHho0&By{#%?K88%45Z zeNgSpGZowI)6+RYCq+n)f=Kbr{J92(i=8Q zKdCHz+HW)4rVYztR-cQfdEGkS-oRe0Uu1)&=nH&{74^4l(M)Zu|H9SY`dQ%S2af z58uo_+V<^`PD3W}0bGYD1Bc@l3HL6%V%?HnSC0i<^XyY!eh~e3zhc_h;`@ihT2KrL zA0nH zNUbKfx|+U1q~o5%ykhF-rv=|+R{u*wO8w!p^sD6326w6*QB$F{u5y)arK^m6*+^6( z%v!Bp0$%Y!x{*pjORx4{i+|ctW@D0B_PKRfxt*PqQr<+D_JWmx0kc1sK0zCBj;(Ld zc4^JG@#FnJ>=%xlW=Q|5$Ke0OPaUYJ{r{MiasD?Mq#B?u0H~-C7gDR~k|{^&N()iBS7J-Ja9wl(^zORqpfsxLs!250R*tAQx-Nfh zbRAS|bOAbk*^{qD)tX@WHiRLNRaX7O4yF21SXBoG)9U&iAYU)y5p@SHs+zbVcU8aLL z83temv+cvB;s&lpNyGek6bc$4%}Yu$LOJjv^qu5pTQM2_Herp)d*k zmU5FsDZ$3bAjg0VUy^xlYYVJtYwJ=jswF3jZ*K+aBc32w)k+khaI93(a`ZbY+?eOJ zRgD^yp3M0z^?Ear>?;P`gM4cj+!J9-Ucuz+sWvyEl3eLZ)@mxHDljX4R)wI)6a`7H zV}hy0#$+jx2Zlo6Sb3s0Vc*%q2d*~JfoR)U^Z!XcMlK8|;&r8igZZejQ4-td(TipV zqg>anB-L_D5Kdy-gGq(RZfZR$$jyRKhl-hi)MjfZa{WC`S3$0*aSWEcz8&mXVs0PA zR?%2X7w6a1TA{OBg!6T(XiLWvH?Yc{fT`O6rSnRr8RD|oT0x#er$dx0qr7qlPp@qY z!!*9a8|rC>;F%yu3eQDr(q>0O-Qm>=o-?bHWVB}&4Sm@S8I8J})JFANJ9u8na5>4G zEovW6wAZ^&N(oV%S#k-hwM4C!{KvHThGan|Id0#{n4WyxUm~L^461DbB02!FZUzl(|(mZv* zw+&096E_N~jR*M71_m0k=CdSnAl4?aC)*n*L#g|qRNf7)u;q-vtJoaaNf zTNCfob|_DTV(M-l!Pn(Nl++c%il!Psv;*z#J|6)d0S#!;9`$V^5ETOYy`n_}C;Mc)ZyTkW$C|I%KZKOQG!UQRICcWxo^@Rq9LtcN!*T>78+VM4O z92)h_(dT16R(?f+dm)jMEQDG>qqxD>VgC2m)EtnP_$><=4i8!7V56I8+=q`)^a|hm za?G*k+wpl;x7YiA{X7(*kn;^15m5j31P=8;-aSpD?3!Mi&vFcF`j)ftEHU7Io3kNa z)sjdQ8-e4m_>Q?mF_&oL2I@V z`RtUGDb6WZnq9h;#X%r?he!Q&HDzF{5|7l&Skn2HzQ{G6?BTGN%s!*muewU?15w&} zpDz9?Q!G^8Ru|s0Jr(WeP-9ip2$f5Irt^i`-qST@F5GxH>7puayN5rOj( zPUJ|L=SVs=W{7V~mN1(dQt@J~N}?aH>=AG|=1f*8T#Mq>sCVXr_ImTHEq9`KN$5e` z0H>N$8)l|9#)kfly0((=J67JB`(4xok-0l5Q>}#DKJ%WaKFMIeZQ~wzE=>v%X6(2L zMcHs8W(XNSQZxGJ$um(i)h=#cHHn+5bX~E@uM|!5Iuhb1ZKab*b*ob%h3t-Ur_An{ z<%S=bK13^>Q5}SHGr}YZrhv?Mrsi3RATFEC!JI7$Dh~pJBN>d+i5oy z>@0oe`Crn+Ork{p_fQmizk|4n;CU6Sx-93(&iWqmbvKuOzmw;8nEdp#Ky;p#wG!Cl z0t4RHW78?m_01AQ7t}`?nfAbYeWE(S#Jme~$w>0~KX3LW1{GeCY>9Ki5G0%sqyxVg zmF&p7SPOvwE}OV=&%94UuS@vSz7fAavcDG&+b){tW~|3_Jp%-}Myw4KYO8!Xb}lbn zf;_D4lgdY34mqddLzk0>5V~;fTTtpv-URJBT36sPKA$ug{GU$RIoA3&X3mUX+~Co? z1(=JY&xM7Ga?!3-wfi({-$S}I>Cr9q>u8jxrw$V~H^cmWT@};S`t@&c^_pb#6G^&F z_o^B9_&5mpw{QK^Mz_|FxBrIwDc}%@AV0HKu%pBI{51kN4)FtV!qZZR*QCGYR*F-9 z`{_ZhFwk=UCx=thE<}XuV=d~wPTk=h zG$-!~*y(!JJzqtTB}el4-s@gX6+g%RMmkl39J`E&HdvMApK@+(-{4&^KX$0U=6B07 z>3!F>imT_WiW@(-Ag>EJWg-{(a;D*am8ta+`J%!$zE8b<{|{T5!#TL)|0;<7pV2W` z{@*ez7t4Qxt^eOaG^VZQJzOuix=UB}H+2-r#xR-s0rr#$@_s>L zF+6(@$lRYiJ{f|*)BV%xs--KIEFPBj_omDg`>u=Xy6>fxxXQA9OsqQt=Mfr|T*`N< z&W4|NBYQRI-J(JjJso&a%DZND(vTWWpW^bXa2WWw;_`7D&*rD;87Z{0 z?-e~RZv3=uxkBc8ikRa+T|q;iRg04bUM=z9xbiVmoA-ICwt|m*5u?-t)2@ghEy)2J z@bds;ppZ3MShb)LztFpa>}(SUNP36jA4sl^CE8dO_9NcVK8x?Er6Y>Y>s7}h*#Lvm z!pOkFQdUL$(PE1k7$>adN(WwRYBnlZtsjJK>5NW1qCJY06sp$W07X}(nvv8)ojQ=~ z`z-A(A=Ek~1ESTGbToc+OwJuOvPvOg?y`VFj*&Z%I0azt0jV`T-Vajeqk?5k zGyuBgG#T7^z&_J_(bxF$eR)5zr42#3F+Km2DWv}0zh6f7HCmAbIiN~u$d>7pfM#Bg z2li#q)(mT|Wa0#({q#)Z9yt>>j3__a-qo^B1*RLIbb}TkzxxQXQ*P)T7?%`=h(;_c zi-fKhH5!CEZj9F?GchYZQrdI20RyZN*8^ds{o(~HVy}a4Y$U*-xSGa=EFEh}B!=E+ z3A~83J}cChD}!L)4o2rtQICQd@yFt98uFTwNPJ;&&b08nxV$^NCK59>%TYWq`hiHA z;ls|*I#7@-XtaXnD$$%~K^3_Z$`q0y&*-_GMr9q>yobStCQCw%1qZ`5Z#FdZ0*!J=WEQi_up`XF_&D@K-bMM*w2M$tp2-Vg!M2 zKQNZrv_TB$y0AM-#9b7QP)${iLHdOkRbX4km*E8uEq`2K1dUWqaQY6fRm zu=Q2-1gIZGp(z9eoe+(M@Ch>eM{qH|AV{j_obb9*nL#|;L#rfIl(7Wj^g#o_Ix+Kx zcENEf!#rzOVnv|($URXI#jCJn!Ed`zQT0*6dRKI9S6Cb`uZ2(~?McCe4``fBufh>d z^+NJ1GcIQ7F!7sUK}bDUKIbTdBq(W#K zN58gahyglxebntiYFyYlbk0IZjZZLEsf8cn;2fUG(4*jb7+4dd5eZiw`%omsrTdGM z2GsU3)JPxm5h<<=%s;3b*P2O30%yHPe|3;oOe;CcsO2d++NgRJ?Mv69XghA$!p#(1 z-L|EN(MM&MEc-0>N?H2_KJEFvoE1~f)AZ=~==E$@YJC4aD|9C#keewkj$lw4ElMhv zK#C^_cwc#4IM3EF5b$xid3a#h^-2rBG^r3dQH!cTl$X|C}kGicjSu9M?yP z`(PUqr^^#*r^2^fO2%T)&;P$Ddj}v{+HGC8G26Cn+dbR1ZQHhO+qR9_vu)e9?c4ue zan?OIZmfOwiFhkxL{wH*W@S`neq(&&eR}O(bAH-Qzuq3XY+gY}n=<@-Q0U(Sr!Y)b zRyY*7Oes{S+&vy%PVsnod-YvyJTD6MHy?Ii=a1Q}&Ipn`caXO!&Xm>|xApsmV{HJ+ z*C*YFkKk%oFPb4+wDkX8WtWfrApQnx20P46d{^ku4&@)nNCHABEaY&}ktq*nm{G zYKiS?Td=tnJ!xyS^Qv7lvs|j0M9t`}+1_z7YoTD8+N?F(Ixb0-OVmepG?;%Vx<9zU z+2)xYZqU)jxYg#m9Zn#MZL-9;7seLrN~TM=RfXma`)VaK3T+#gnzm14e;aDpJDM%8 zE=S#t?RVS+pTyUtmklnU0~Nc*bkL?HiAT!gFA1uj9>v_AwHoe_k@>LvOU!%W>rQ)t zQZo%mr(6f3o~uV-8A@l+O>CZp)!;#pYk@R9q>+3nJ@pY?!KX`V6tXDhs)^T zm=SrWBcr_oz;^l`rQ$2a}&as*LzYafbuoczTXt4w# z<^xAOeX#^jS?CI-cU8y^^5@!C2nc3;s16=D=Le8Y?Crz{5Uk>)@U$SQBP2@e2MRgy zB4pT!8e)URXNX)FAReiK;|oUU_k3q8;T~&+KLcN7YFe;gsMcp68rIL&G)uCP%2S`Q z!aqk@y0+oK8q6@j9KEs;I^;n3m?hRdh@X>E(59trgTN2`sA0mz$nPLbDpE5NWELWA z|H7O=F|}u8fuvOo!OB{hxex#yn2@+Ty>5A(EQ@{rXT?(C!ko?}a!_Xw5eHt)eqD5k z9$sw&vynZe(Vz$BmUGcze3c=Z;0J|x#A8oQR+59HXv?6GmO{vx{?Hs2_Rlx^zs$vR zWKC=vU6J0iX6PL{BbKEm+H})6rPf@Bw5FRjF9T2!1KxAk zXcWvBzmzV=$7NTiyGt!fn_aDr%=dj4ulIeGEcfFf6l`19N>q|(#(!e+h+wKtKJ$2s zx%$RaV)YV@nn8v3*_4EVfO37#y%#l}90<+jv zAMyxMIM$bsdZQ7>u*9~IeO-TdoN|95te;M4`d6!+x?eV z?`Bgi?tMCNUTQUh_`QKk-5wA^!05COyPoB=ZP|1&kns?6}NC)f8ErZ zFCNc^i0hiO?mki+@ZB84Pv4*=fF#9(& z=3W&y=e!eVzSRsfsP|;FEN;gw1dUFA3_#myq1tvdo9p?M*d|6f7f~=UNVo4tB~ts% zt!XdM*ULdFUik*ii6BOt=Wz7&8w}U<$xoB8Zcev{`))E89`#bL@52GzUBn8lyBSAZ zzDD{7G+Hy`ql8SkVra*f$7*3gurhN&JFrd%1Ej~Lh!ehSBK4FVL-FH`*tpxf;Ch5D zQqB5$?g|mzlM0#3`rsC}wFrdt)aQC`n>BP8n8m=lE1dK~HQg zlC~8;*6>=OnhF1Q513iY7G6>*{~-fEFwQx>Vl6C(mh)453c0hb?B=@S^V0(G?Io|- zsl0pV_V+(I@+26us{izO|33kG{C`TtER6r;$p71p;7J>7VR(_O9hx_A#5ot`Zxv)= zVt5KdR2Nn%uu=XLLtBAA1M*!l36{T1-Jo^+xl{+RZlJLdLetL9PE86PuVkk80zcbZ zD|^l=YArmh&YJ~`lMi!6+~M_5{7?>%f02z)4Um(QM-h`#8p^|e*GLQGXmh+Kd2=8S z<0eDBDwcrnt!kn~xjo4Qljn4+&YG;}iA9>?p}bm2LNdSn3OoXEh6jiC))58?+e=&p zD8vpq{bN+?g;#VEvGJK!L7Fr-cvfu|@*ugjsNwlfGM&D16Tv*HK~K zh+YMDdhDTmu~s*CV3gOQQ@gO~HK z&ulhEhN@L|s}{D&@e@TbQMt9uv??vp3{fV~gJZ1>b7mqbh$#IlLTCEa<@4Dnvfrd4 z2(r)c>0Djl`{kAPBgGe zK`807w>M@7@oJnbmU?PR8zoh4qC`^O8GeQrZX$P9O%dmV%Fp^iv0e-q>9n-mj`j>~ zkXb%co^{!|Gpq*!I1UK?dfnUHI$GG-Q%AL^c;&IH^5lZQwHR)$czHcq2m!XH0E5~x zzGKvJJgW?dyPY7Xwq^_GUop?WHlUPB|9+epMawUGG@-mkynUi$fvH@u$y&J=-5n;R z8~)&fp7f$^sOe0zuWgk=RIL_6i1;Xz_Bmi>sKE^QKvkSrOA^)RCh3K^ zvqbF0L;2xrBSaTZ*;)(pe^!FBoYLduyY)p#3AYruLOKRZxaRP@UrA(aif-R&QqW2} zu6BB!N1FSl;xvuJtQ{_2cZ@qXI^@tM3+5_X9jhGcPu|n?BDz8ZYw(nXgK_n!&r`Xu zT!oDNF);>2X=J?xuqx2ny9J2D57XFk}OAGPS?nfnw*3yW~o>_Px(Jk#R}sUqS&? z&9}?wx#5KYS|!j&iCiVXpiEv8;~S`&%L4oRe0`iOx69q}dN@!w_WR|u*6GH>s`tX? zu-+3lx0hXWA{I?{I;VX8b^O)*&b;;E^~vFTI(M7v)%$t3Kb5!Z<9+M3&lXJg(zkHC z_hYAz7mmmK#}v#)67dt#>W|>0?r8Ql=g~OaVYh`OZ^01zP`KIH!nmJ3%3{4q#h%oL zf_Uzw6x?%3V}JJgd#fv~>vK`~*bJ+Q6=H8!N~gV~sA@T)-T6rZwQ1rhop9{llGQ2e zG#=MbWYWeGzy5h%-8yW<=5XxvF_iQD!NK6i$4ACoEj3$&f`v;9JE!uz`*pTM?}6zPqP7em|;IW*eH;t z-WGb6-f-105gei(oU7;s3?H7V5skf z@UnMDOzc!+{m{OyEnzr(lw-a`AC`lBkr6pbe1rbA5ap2PY}nGTaY7EH0JA?TP6Y@* z=_>fy%z*-|K=IW`Wa*dy)I+v-Ysy3utx3UM7BOO2z;rqeV4{c!2}Gua6hN+_lfym9Mp<0q_K#*1`D!D?=Bn;)-N&A(dCAPbSWHW_zHaY*@FYM};zMm%GI1`3HO0@RrH;*OGChZM3) z8Ht)OBfk>?qmZznEs&=-YuZjX57sP$%1m4-Jn{X2UswjfFH)iANDYYaL-iF1@lF5i zxNaV(u!2fHw9taen^~drht;5(g^5B_LJ;qkv^H8GYAOf#<@k{>qp&a&5s2_G8(2h{ z1zI8LpMv%fp_$otS^y@nMhj4s@gVjh`b>ld-;=?p0pL>NBD6ne!r~r~Yth=J@-O#= z5fy|B{yD)Q59u;mghX+%?y%LLx&eV+NnTALpMujKu~bP}F(8n*xJM5BVG^@?Szc0e z(ybb0hT(%MrN-DvtyQxoA3nJ=pa{Qd>1M#UNx~H=yclUTEI4ta2-x|QP9ZSRs7_&^ z@!_8ePz&g}&0j$L;uV-P321t48I5r;{(KHgCVa7hNCQAgefmIA-1&?HK-?56mSEXR zSxd0sMRBNr2D)O)pgE|l#!8aV z$RyQ2YpHA0H;`aT=7MP4zFCp@P$iA%!C!zWEJH*3QwL9qMKlUP#I=u!Pv8%`X#|Yq zA&dxL`h8cY(la(?Eqdo)VZ;@lsc2ERj49b0qH0&PiCZL>@0rl?$PF$=2bAxjp6cCD zwUD0=fYC!96uJ084Z-8dImZ=yV1zxI){i#KkK$^n%Deuq4?lCAsx{ViH9usjQIkKz zfz~-J>Oi3?&(*3|kl&0*4(>yL*!%O`prcd?EP8(Jtn1w2LLWth2y39`xI?F|`kTTp z{K0i6fbkcUG`RY5FrnQKa0^%~4S_>xgZfdWnt$n7aFB-oup?h{mt4dM9#OCRacQg5 z^|8xf^6SkG=yce#b;h_n$K>hR<{Agv$E|6N>*e9r;`-?{(G*Um7N^?h>uFt^iy5bv z2Pk~*adEdFD#;*lpaQe)647~-E_(d?V$;LOqGy@?J(K^hWKOVSQmt-Ymag{F_!uwy z4>{3tp?#`3{Q24Ty`%gxIlIGaS# zc58u(lknwE#&)saFT6MZe@06 zpNy=u60DS$i-T3P^0<*>b!db{)aqfz(sbN2e`>+mY}>SMu2xvCVW z+Vbf>3T4#iDpS#g>*)D2mdB%mljWM*>&58t;WTr|XOAYvWe7Vf3l}&2Q~C2eyT8!1 z@{KKP$VVyt7c?YBR+%_OPctrKcTL2lKc- znt8am0dGaDK66ln(mhJZF$Z+8($Fw4D}*mH8?@TCI_`5ouI{m!I#=CEYoD5Oyoor(nMWNduUc>1q_93aE=RJ| z*(eFmmQA2w*`_cAZ;lzSY>D%HiSWr>z(&C=hYK7%pI1*1!Z7fJs9H;&DWrX;J$8?x zK_}38*U{NhJ+shsH`9>S32kqPzns+^GyD|B9j*2cN+TpEOGcY^(nG%XOv`b=_Bu@K zDBZ&yO)7>7G@*RieNfMriV62*^ZB3wie;c4sBmg;K|RYupzIpo%Jl?Gqi)NCZmq#q z!tghy;qSXt0vqTeTMfe`QG3k#chMV zl@G`Dm!Rq>cakR=qb5jA>)-}F*r3j3E}3k_@ZV7zF=IxzKue;99oY<`o~VZxn0w8f9;#e#kg5UZQ;NW)+>b z!EC_gUR3{^qh$n>RmbNwUU6}`P0!tlTyt%JEYb2Z`}(f2QX7G$N~N9`(T%b+dU z-mdFdS8>H<<7lGlhPXNJCv_6cp&O)$SWWJJpc`a}R0%para9Cib^mrs50QbfH*-DU z;obSSQftaY&z(4U^%{tr*D!O2z->5q+3|kL59NF)|$uU#__M6$U`c)l+SIXI! zJ$#<1F}mC@^FCF&;w(d%%`VrEn%COx&mt_sTp0fPuYcUXvY_xU+-kQ8@B!J+hUHr@kc&Hlb<3P?_m30E;yb&Ayp+%!?4m4}V zEh#-OBF%{|O^)XWXq99~-TnLhqEwED2QLq!qqDPT;w;&&uD6+VJJ~RqO;3Zt z>x0B(|Pdf)#UX!;F-L>IC*d0SgG^pd=Oh ze5YAjc&rm$d6zn%dQ$|}cu2&GI5`rvfh>;Wt^M^C`}eCZX@?K)d#>Z0Y4>Ngr#?XP zYVI#Qr3qpo<3DjpNzVR7RavAIJGNHDqm;Rb;xha##O^5E->6DWL5Ps_lJdnT;u4ge zDGiJof(V5o4Dm3t0%#8`+HDU?any}O&Q6VHmjso%fAu;w#sn$A{huAbXYvjk# zB(nu#A|98>pxkjMD4=nz{tnp8v3(-CZiw=lkWqeX4Zw)QRsq0}*K`Zuq=y5fWUeV(UiotB!|1d19smQk@@CIwKMRO^ePKoO(tT91eFftf(>!*OS$@5}G>&(B#qa`^id=SVt_^vE++qm_{h z(S$I`xaKhzK=apZ`1VgS`Mr)6qKKyqmXay6n}^Ux^{oFr`unf3$+rS3g>Uk!0TIcs zpR(^l63!l0o5<2@rvw=0iwE*F9eF%Emv@~O|08A6H4IZ%z`dd7*g7u4kQ7hqO2pyMH4 zP{L?SB%?1;X+=S?EPjToH<;w5P?HWA%ORW~Gv)oHDe`pe7R@W6@<%z~D~8Yji*$O4 z3@?Dy!?b~nDi4OS(%g9_yM@8%)Lb{9UDD-Rt7;vsjhEfz{l?N#Twym$$Pimt8CO5*u8xjZclK7-V;wHf z?VY6^f64V}-UiPoK5LRPLgZzr;28akl=$ZWb8l1ys`}v!A|)byMmB||(07+3zQL-A z7R}eRcHirALDooRek%z41S9@19Fh+=S915e>& zwepr@f0~t-hmYvT?P;)psN}dT?{YZEVFp!V{)L2$gtq!j<*Y%XU)*f(4!U4)VE4VR zx2n1xFYRE**P6OiQ}!Okut{1MQh3Nu3AOh13ra~D5p(K>XMA{SU!m;lt0uYE=NHl8 zkDenO*3aiqEL;Q9^Y=lARQ2pyGho5oIZncD2@CuUgzYwQcVYaHU9r_?SVfN4wq9=+ zY+J7+?IqS6KQmbRes<{{+ya|gIj#sYVPb6I(quIDY9^C2~EQG745)Ive z#%P$4umhoc{93%~mU(l+1${&R2rO{2F1?KGZ%u4y>+nORdF$Gqb_dJ0t}YO$WnYi$ zIbTpRh;l1@;&0@?TCZONqJQAHrF-YmhVM8cUN>%pU-ow{7cJw?a$LZPM<_FcY4E#2l+i` zOW&LydN=p&y|&-(bzbJTCyQ*7OZVepa+(p$WCFbcMHXQ{u;ClP-?}u&Uwjc2a?pj? zD3JRz3nj^4w#DC?r{5}Xy}>md2)&LWGZ*Ktk8v6HW|AFrV-L)IMH1*SzBNMbTALhJ z1-PO5vk&~cMRBAy#m-#f$YkMr#PV6h5s5x(B)MXlN7qJD@AJIEKFK?s(a;IC5ruUEqc! zzfo;rz8s$Nvt!2x7DT~as9E&hPyio+JK6BNxw_b}8S%Z3v-R@xpRa!#@p+sY=yar| z(jFB@x}O^4b)La8KE?r>Yc)^JK82HY(sD zkNxC2z!;zTj&Q|>zO9#V`wkmi@9NFR=98(_1Dkc(79Sky&ej2;0mKO+UfTaqcrr%yXlj7 zM%iUI9nGN&age*sp9UiW4J73rMbfch!H1Ri%4mreunz5;7fAd(_HSA%QUEKw%2vRF z9VAaw=^iT4-WJJ5Td7}DNVbE39s~eA@&UY4_6=e8*jXT_Mjq|_iaT~EO;s+H#4}>4W4`Kkr+1g`jJoAZLhfaqSL?Uf@}J(H%~$4+gTm)7YGgwtz2z!tGy0NevL>&&?``iNDPXVr%gHk z9lD~^!5?LNzaS5VOwQYGnK4}V;ba?3=FGav1~GY7tOzPPkZgy89MpbMg#SVg;sx22 z<$qDEOF&U+5CCtzdq%BZ$hqb#V}n0~3Gx8W-}+a$p*H2pPnb%jXn)s~By3^6oA{&(bN=`te)|Dx9P+Fx@ot=xmPXg__u&(v_p60J# z$$Wo}hUBajI6&@K>6c7+nBL5_%Hu0@t;ee-Cak%icg}s?z7R|j%0ZTv`W7aby`jWQ z*8Vy$ZvWP(aqOw*aD83=-V-ZYtJqQ5rg|)29FGREYi}q|plE+g!aDu@J4iKb-pXV2 zTs|2|XJbRHr8fBK>WynVbcbxM)`dHouYqCwOeLG^yNwc*0FrOSPp%Fxf%+51K|nI{ z2M+)f-13QW!z024{r^L7SAvzfuvU}xhs%T%^P;o8GvDi2OWjv1u$$x&YhXVMsPR8% z8-Sl>ijWOTmsC9zr~ z=b4)0!^?ZGuD88+>KKxnSg0(p?aEsX$*)V@7V_7ja@Oj%f5*RltRGnhW4YTNw@$CR zBOyKuf5NW$slPM-uQCY(2RqaM zq5iHWZKkD+Y|{WQ2;sL1&jX>U$)xQ9Li*A2iT^knH3SD` zHGzAJV9z&&*onxmX!xNDHpSTC{R6x9Pt5+cV~q9kO_2@Od^ zTmuCkHck>Y3$J73lXHY70A?}85r8j%9rX&C01vvM8%A3GLjOftgzR0a2s1jte>B9O*0R`AfI_z$iAxRD1;n= z@d#CK1V}?#JhT_`L}XhMml4Q28Y-_guaX{=036%KFYibIS^y!8+p6&wBzzw5iJgDZ zFSR;3#5JuTYddI-5d31lBQ!Oz5zRnBcpzIlpemxZxjF#1>b^7b9cLg6WMH_48>*L3 zgMI)q|1$!NrnFrG#^Nx96Dm3*Au$~cgCf{c`SVYXHyxd|fP zMu=<6gjP$LvQe_jnxVNTOPQgt6Hc(3J-zQMDKvk8-v21+k)FD0+D-GaT_amsgLL{& zc6I+z(IdNoMc88f79d^5hf0J+eI(Tm*9!mROJaa<8zv;gNO(BARv)Fsnxq`O+5CyC zt3lvd9DMivJXf=)P9btk8rtBzI$6q_-Dcv#V<|gb)_n>5TC*pCEEf($1l2W53rjnm?pDt@C{H_^g{dfVPHI7 zdU<7&I%aZ4tl<-#@q?rd7c2hEv>cNdEZxk78Bmd?0zMHc^C%G{p)PM@@smz=XMI-= zW@>|#W=*NQ=QjMT^3s*%4^P9a)><(pu0XE9^I~V!}>4Jw?id~i4+h{!=!{*3+_(; z^n#~`2_v(pE$GPy3iIH)+U0x@&v55vkH`8I*0=obeUSzHWO=rE$j%SvrW(9RCF2pM zOc4vdAGi@pp_h#ko2twr6Rv)r{i?;Q=w}IjIW-&iIU~a6`$<<}wCrgrbIjbBz zj?geveD?lc7JOWSAva7g*75RrcwRmxV+#Q^v=Y8NpIdkJaiX;?sQ=)g`&jxo7#Pl3 ze=>&2;-{9uD3RQ*~l z+m7|BkqPbJs(b$S5`@}Qn{sJ)>Jd5l*RV0nO*_KvHT<9DKY~p5V(EFE{JRd9h4YE8 zsk@N#wV!@{Yj3i*CW%+4q53l;QPm@(vM7{p7|~rNV$fE!^L^^@vgMmp5X^feo9>RS z0qx0V#Ad4TrWv%^tzqd?6|MQ`_4n>B;^aNP z_jF0BZo1CcPg}`u5ATz0rdBE*HkX?h_XI#Gl?7=c_Vw}7BQm?A_iG_RHD$3rD{!&%eQ-Iz)j0A9=Dgf^GwTp`1hX!*>P2bK2gwrIS8IUbN;9*l%^W>t-m^6xz2`DBJ!5 zR#vDM3m=X~hR))5AJOR+PzuAJVN*s5n%LvULW+vi@cfYrEJiJt@AB;P z4mVb!dzpJ#!j~Fg?TWzSr$$&LRvs^bA0L-?qvy2{gcdFGAn!G^03S#y;6*Snpp@jq zdpxnh!pCY>X{WePs~q1J)0O0GV(jCNR3^% zHn_n~Ph26`)t^}Vm!TLVI1uqF5Prfz#K}uKof3wd7MSv`eH|@LI+Am~viOmZ zqS;5RP^bZZ-3gTSN(j1~5ttQL77)rQ~c2zav+hi20)YEKsJxW!sg0Imj}M?zQ*N8PSBz%3 z`1u90SeYl*{$hYO!V2SK(FbH1dou84HF85k9#gad@!0tj{%%V`2!Y48*x!LfkLhWm z&iG4Z`Ez*7kDWC)B}Ttu3HJ>I+$+t7(wN#Pjes>SacaBhpsp#nfn_2E=)=os>I}3% zCty(JHH`+*@zEuk1kkO~!Kp)l&{DU9llq}ip_~Z9(bvs*(gV+tEe0vJ5z>SdgWz95 zG=Jq8iKPUo5#_a@k9fDm$=w-%@a62Z@AeWH!=u09HkFpP#p#790+sMC9O>cu!B7+S zE~MyN1s+fQeF*)d9(D@noS^?E*hD=91XJkBz*tCV06FqY-VvV=NvQw2pwj>+k$v@q zJ)7RN;J8jyAuQ)Ogf`3{2}hL}s1&@!E-DC$T|J9_kP)B1EMb)nA&D~G7JvfCSc8Nw zMy|Mgn6Ni_>5eO05QhXE-!Kmw1B{}Ecu0f;aT+m3!lSPt>p`Re2l-6d3}lpa^Z+oIRij589ROQoDB;6agbshBoZMXTZ-qkuF#fA{M}|juDDRD zEH`xTbxXIz_Jm@Bf5-VgM%vx%Yc+>O!Rue)AU**g#zT(e4%`4o3$^aIR`1}b#X*^o zu_X#5knSA}T@<$pjzgrl7C;Tsv_{!TgJ3MC3@)6+Xp4ssFLz=mxx~ug&+o)N3=Q=Cy@4v6FElJj@|T$@2jr|K&y&R64M|iN8>|Y$<4)8`#W|xF6kM6V`m-)c4HD|@uj>D+WG!qlPpDQW#TMw6P zdF%ACSmbT+7H_-Wp>)Ab++{Wf#JS;3&8iG?Bdq4f>yEaJs78j5I$NJIwcEM8?}4gg zkIAA^b3dvi$KPI^yoeIuhx^Vh1^+`X>{*A=c6(f74a8p2aE%YWEa`~Frcseh!;pR3{UJh_CgB1>a@T4Qt!U5^QtC67D))HQ0wlm>J0 zw;=`P613#?!Ja$n!Z~HP*ZCGbzZm$A_pzDQ^4>~N?DB4@=_u%?1w-{uIQt8&bDr#ucg49ikQVZ3wG2~q?T_k zidDd%hd36>KeD5bMT@wii`Xc63`UPN(S+u2lv!C;DfG9?bJ*vgQH1>>9Be^k%Cgih z8(z)VI?r3LTQN_g>UZByKoy4WYiNq4;t{luQv3hSTzMISJTClf{j;@T-w(Pt0 z(t?|}NY=Nc+oiQRby3RnkSth%tz~yowqm{_yBRE4Jz2D5$a-5*_CB)-GeFmcQKTjrtMWmPA4qGfinzp5454I!8g41-yCMv1#nWl~zWI3Yez$vBYrIu8 zfX!#))SSF+Ol#1V#7;#r1=*`clR%w{GF4COI5!@Mm(6jz-)$@PRkg;B zE-qT9&W##%-P?19r{hFCt;L3(Z|#-14%%UTK4jaQ>4})mJ|388D?K%CpF3G&BXgW0 zJO~ye1>?#>LzZc6vAJQt%GaHGE|@+Yw8x}=5+HDEVZ5zZJSEP{B*x3co{W>p^{%O* zo!uuk|Frs;%M7N?Ry_BpMJBt!<4m?&CY5#Ax4=S|({bFRxF3s$tF`{XXp$p+d{(?K zEo)c@c)0v*mGSYLVsTaC{Zp3s_vwdnji_pIm7CEv5s16x@WP8;(OM$6Na;tSZ;g%# zRigK3Lo!b!YkG^EnE5(Luzfhn;G*HS~zx@R~J^SE2T3y#wOQv$e4RhIyb}nXA zB=5$A`EQI%K93qMb#aTj@_-s&PCxNVN13w@1X}4YN~5l}`PAaVo4H?xbaTBLreaq} zSf{3AOG38@{vH^Rjtol0MW*klGJ<^3C1t(^Fsatot@gbR5KM42%6{EcB-$#g;uM&| zd@jJat+AzrXm_1n2M`q47BXlJQ#zg{41rW{v4( zPAc52Cii7XRViVBkC=q&D(V$^&!9x4Zn#1($Q8v38MN+Gi3tawP{xBNoYw#}jE4y@ zGkk~PV{JuiS!*R$>v1KF|H@X#9ve`{m3nv&eaiK^KdtW@xma9u)MA*Y8Qobsi{8>j zHLb)t_Vsu^mhr~R&Bd}pkILe)JK<|Ke0n?MY~VB1#837*4NQ-hT(qEUIL;-QGpE9_ z9KlaK*Eq5^Z6s@X=sS= zYI2c0`JV28o=vjsZam7^yqm?^Igw7??PS*ac;3(112L`YQDj$~D15_r>VAiJdOL>2+eEH{ zs61+uKUkEXbmng7G`Fal-&%DdC=(sa@;Q%bf^xYzb0*tAgDbM6KFc4SaPx@y@j6_5@k)yDugwZ=-$rFD+k^>%BEX}9YbYi55^ zdF$0lq|ON7`+GP%?LWMpF%!PluAT2GyIUR0MU4JRoxv&kGMmcG>3omnwdUT&=t_9+ zYu?q+P04Rctz!=NQJTj2jt(QX+k8Bb0H#dl#ZNu91@q2Z7hVscqMoe3eHRaWRlP=f z*)2S*vlo#sW!B@!nGFudt>dQ2`D(%mboQ)xT;dPSy(eI%VD6KNKi!(@g&||THURG; zh2nIH1GKyXfAnmP^aEM>jk>k4kMDZF_<+VGc$>4E?ppdS7aG0pJ!o~WI?&SY9NWEI ziMpv8JC*CbtJ|1cn?rOH2XQqvSorJLs>)LJRvN@Wu1|`#9C@9$jLJx@Isetg|Erp0 zejhCehgdiVZ>S&LRSL#w`uwA9K%g*KcpQgxuzySb<{$z1U)qC&Yu-ExojAxlvybyM zf`FNSo3dBSE}L>7E#2eGGkHd7oHkicjZyl`N_1c7cwX_fd&-68qh3?Vnu9C*?Rz>= zKxA!WX8jKqo`e9T=s%5_|L<{TOl<%Cn7K-GJyJ&%rPUoC3dFma&W7It#pucUGBRn7 zSwzDz{nSgBGew+BCZSe5(<#b&j#a~>5RQhT2nFFn@-)-ef2WX81s-8LhzI%CJFyZ1 zp+<(i_SBZ++^fxT)&Ys-)J3z8W$mYCsv`!T!h-}=?04W;NN}E%9ksA=w=o5UsnFOM z2|h(UW+iDMz(Iy`e*2M@2se4)L-?4%ysXA36T*l|4Q`rie_?Lg8)&O$2Y=vX`TpR6PQFqtqv7c(&8o*3o< zuuzx6yjc!mbv|OL812$-X8$`k0x)%WWV2x|5w5&+`BgFy5wAaX{>@zgan&&dOlru7 z2l4njKelD%(0WERn1Lf-gg6B3B7y+`xWwV;c42?MK$|iLn7Dn#{AIyEfnx|Fz~f2I z0F`F&RRbZ1Mi>iK({|()=nOSPOjm$P*h}Cmgfc`a;mHlS4Fx$4^d=ezq#lY$7Sc{e#mX3F6ImQkEF+>FSjr9t zbc1AN%A$rdyNn1jr1Zj6Fp+)($`c{BGC=%}3`3nI3=c~QJ0~Z^ET;L1uvn<|GZZj| ztMoa;gM)%6#{;V9kI`YYCohO2L~dJ=D$L) zK^=Mw&KBvt(aldEkFbnB{I!pgM6_=(Nk0@piwcwUI}}cmm^QUg^eDbUOH`{ri=RWD z%EGCgW^@;D7j#^WuZ@2S8k|i61Ng7?%denycu4S63+mA@ONsnOZ7P1AW0-P=++nM;f4WQdoEbo_#ERNe?j!B_}cnze1LaBcP;QY z$e)OI9kvD1?Gj%wAX3NhM}s6GL>rDxXgc^D4%%j&{0o0wqsihKi(^OS^idAK3p-#P z3!z2AkA*LjVFF}0iZcW1O{zX`G&@!o*n~k}i2j_{&^R4ym%rjYrRPJ?(!@c4m3Akov`#bUdWJ@ba7#H(z zopio$iO)Lij?Xc(!?NG|!@gecE0SDJ6;@lYtg;8_y{|80FExv)I$uh7ZEv%Yy=34W zK99VG+da2fpbo(POEEYGTt0RE(>+5Wd9nFKnT-DX4JJUM<}vw&vKLvo7G{qNiR{a7 z-jrP~k6+i-vZVt{`L}QKF1^GCci#JTubq?Eyk1uixwW5)cx_Lrteo6bqIkW|$IZ{H zY8}F4IkvOmrkn2r_I?&J*r9>?WI3rkw}q8hmX%nc%dH~&f%`~ATLR^vD+Qq0Z>zn! zpIBH;tyK!fY%f`562Cty@itg}9RDB2-Z4hEpj)(V+qTW!wr$(J+qP}nwr$(CZTD`w z`|Ep>``z3h?>#4}tgIhTp43XEDpfV-9K*87=PFok?do5U@7>_t#5;Yi_w~@~&iDC@ z*1{Mg40Gk0=97sC)xic2a!e6# zo!Y|Pw{hNfNy#DXtUh>g*`baUzEqZos2W@*&xtHcQ(i^j&F1LcNm1X4Py8ARlYu_J z+^x35^XH1=<|%n9y^V|u9%`fgKMsk({P4P|u+v$2(vo_o7dQclui3g47G&_8e2sS) zcwBrgPou~fhs!x)*g`3lKYzFt6_Init-Wrp)X30_|L()S_ch8JmgrgU0nrm4^l5SN zY{^jRx0&K+Si>sFtiDFwWbK$*vNb$iSznvCJdZEV(+EvaiOT32D!r&ram1F$tfvX8JQc#XZAj zVbHtrN#NFv4zhdGwkSOf8DN`=m)Z&1zgoZYk%DR40oorbI_nYx)KoCXJ7ZpQB9gy- z+jWZ(tV!mb3B~IaDQMM3(Bl*i)YJyhOeIu(E#D5+923fFx)E2$t~qxieM#me=c?Ky zxoSNP?kU;$w~_L;uOu);B(H_p{GU=2T3$&{nY_YZ)1|zRf)vxZX$e=MW^aXP%DR51 z(CT91^|R+#1xu+I!)4G_=Nnk(XGj($!Hf$PYXvC}6|VrBMhW=pKyh>Jqx4oHQ zau>2f$IUWcCaii{xB8U?b@DECDW9q*(iL({2AHUg=xyrSEWT#@`}S><^{OiR9#~uD5yEQRuwxcY~Jr+|2G5 zdb8Gir8%Ee-Mg5(&ELm~q$#>7?(2kmtHt?C0=*8eBD| zT`G^FY88i9JVEFrnrZyswCYkEO8ZUnP0$; zV=thtZ6Z|J?lXAqRe_RULO&UFCmn8fGQU1|wyFY(RfB)i;3;m06biXugLh_kcDs0o zbBR*;kBQc?X}x@6<2d-c@Mwal?#4)!K`!;`B39@Sb=lSxjIAq*so8n?NR2hF zF0AJ`@FO!bCCW884lJ+vi;*mZ->;cUTPP^$PD%?+^B@Kj@$F1O8DUSso|~&C6WK=B z`6epn)@-A++Ky1(^5j=YN4bnc-K=K2xS{M=(#A^3kQy9lSKhHr9iz$inxEO({XB|n zt|;cLF2b5S0w>Y4GPQ}qO`z{6ShiM{G(kL|VH`=g`CSK`co2T*`v3^1;fV~6pJXh>&B#KC&6ca$iv4aJ0K4DoBn;W2nAlq(~ z*dPtD#%{oFY$s6xkh6|7j>p}2OasmSup_Fo7p(^B z2X7_m&hD)JN`k_Rb(=hZoCyp>O`O+J&n&-)PLr9z`}}WS0>yv5Koln}I)K1#i`QJ^ z)n86wJB=3Hd&0RvAOaPm6s0yTYH*o~?EX6oxi#Te$Rg&m*G)h$dYz2HvF3+_aL=fG zfCM0#&;O0BqLAQOiZZMLt%a1s+#AeWJ~L6{h!AlGtBC+2OUop_(hgep3mS=^?vIAy zTxcH8dl^7u%9L2Sx5Y@PL&Ol4fh>*bLSr$>IkCwk z6-SLzlPX2q!hFS%x?z1-TiVuS-{9W&SN9;3Xvso%2qMK#lPir<{~de!E$+{hajRj@ z74B`ek5}s&SG&9K$NkBk#ob3BI8feT$SO<^O!JZFyIY_mO=L*>17^tLax-WJMOLiE zafsFESXEST91hL2ooa;{(%~~&Yp=mwGd5v!-_Ns#}TH)&kTND2iKMajHiQ6UxS9-CH9LV zzN;diI5=J6ku4p)4d$7O4QT?4@&#!2z+jeTC6vi2n>99-t z`{j{LYvozTmg3hoxgX-&MvAt1&z63?3xCp4V3)ukdt#elHLMh)-8CM5w#N!vQ}NmK zS&Qa`V`U!K-VsMvBmBJY;s4TxtR+@^Ktp*;3U@}^Z_`3p{LT%`g3Kv)uS1Oc9 z6BPJh)aJQh465t?_HR7ew0v`Rq2tMR36#9@c$JsH#EMQI^OW zrm9WezvKG18%=n1bZuq@gWOR}iI<1`&?0lF?t|=Aak#bo9&sb{ejZciZA=Bv^Tx1N-swXv0(W{79O?!3-}9PVs`nLTaOsA{9j@nC*={aw-|v6__Pl;Zz5At67_%WJzXI|C64(2w zY|?dF{W=T)1BgKT%}S8tM9r3_x<~|N7$+XZ$Eoo9pi({oeETD84Iy#VbUbZL-<^B! zksHs-eQs5=9ojFFYOiHUm(IGRUisP=g!R#(B9*nJsZ_)WBZExKT*}>3yCwUNi9|J> za3n|^NXg>$+ahcxYf1=^I!_A4hnuTZE1-G9psNLFbjUq!1qsj?_^lL%&IG4Oh}!vk z!qW)QzL-1Xerwqd$BRawhBQS$u*g+_H4$wM|9M{-5&~3%0mAWD7KcGJi58$G1iI=D z!6=~*yW9S&sk04BpaS{wMrWC;gR5!p- z09Bu_5zT2LlmD)srgtE#fm6yr-`>ZMil{mk+! zXY%$KK^1_}m3f4J!g|X{^Oh-c4JXP)?f`-FN(d$D4ws*T5ME0xUJ1^coL+eeb%yE+ zfXLls64V(as3w5D>m(GZpZiP5;Ee!|$q>99*rA1QcFhNlzI7C!Uuz^UMqrvWmx1Q6 zB;*~1I>5s*U#3=%282&&c{l{E-T~UTP&?AJO9)&Tj4=a|;|VPS9PK$SLG(o(Y!2Xn zqZ7HIf8=%UtT%hM#UWo)8Xn|l#?^AN>a{}^p4KBYm)Z0FaaiEQ z6?F}xKMZN{Dm!E?(E$x=EaL6j&%DzRu%9*h>93dqDv0NT3eV>m25m7X=*JYW;47>R zUs}1`K#-A5#o`u2LliPlQn5h!DhW1QkNcF0YWl zxmCTR85SHcEg?#4;@KXw@@@ZgYn~=ZAmM)2k*CQmHkelF|FdHLq zjmhwV+vqpX;t5>yF;{3wDB_m!qDFV&gNN5+5QUYsxalb=q#-)M`;D&mAP!l3^>5}QGuhNuQ$uZSeBOT%{3qR}zI>k_iMgLowyAnv--W%O51sV6Uzh8* zd|v}Ud#1RpE{En?tlqQli)w0mydZl+l3Mizg*A><*HiW1&yBOX_%>UGsr0?PT|Qqq z54(@3Nsg&{+uAyv#84bn>hTnLRm@P{Z!cdI z+}&+m?}tzOc-QPsPMDpP-cD^E?y(EfZ2unPCXzOsD6XPIUBz79j_~4|)Ov_H==eAb zqR1IxhZ7qG1l%!ECZoAg8eyC00u8T~Lk#Qvo>RkBh4|A1eSF)Puex$6ypN!FF@w=yvyvz}KhDxLnHd z`Fs!de0to)l6UEOBzu*ZXItpj6Di>?W=(zis(UPZrs{r$zV9ZtVR9vQ3UrF##U3(2CepX zHBchKmQvCLBUKagPmC@LPZemaEHoQmxhba$L{k%sj;lT_9shPWp)Pe@+-bm(T2#z% z&o$X8)krA6wkunwBDhXuaF=QleUWXEmOdvO`g2@iP)JL?+t@s7)hEKiJU`sb#CV8$ z3gYMjK_jevi(1aou)%s{PbL@2<#|ky&%$c#tC#k|jaGv&W3d!qJ_4OwJ^0548`j0}1seMD39An9l@` zC>Lc*ipB!x6-AZdWxDZ#n~wTjDo<{**G5F|l#hZb=G51>&kcK#)`)9Usw_oxgC0$? zL+E||LfDq}}IN?AWxx+-BJwzlRt*e~+`3hZ>rDzK_D&P)xsA&p?u zEagbdL=mG{@PQ@$OVrw}m9OYH zs}N(T&*5ZnN5O`6?=T9Q@)O#~f!QIN<9&Zfnn{sq`8(&NYsztTw$F&gneB@wuQqAW8onD64<4@Ly(zk`%C3i6c0Tr7~ z4oT<=4=FSICT2rCD|b|rpR`hJ=2>QnnI7~9%wr^%ZqLg+@)YR1xrRI0M|eU!SR+i$ z=@5)mM6n1_?8V`xs5R|-;3TWOE~pGqj$tdItRtDkF7ta}nU3CORIBN^Hu6q0O`%v` zRBI!#eZrwae;nE%t0TdtDE70c0$6*xQ1j=5FT|Mn$g87-{eQ!PPG2dt*r^%P6&!8b z)7aP*+OFC-);YiZUgj3hbC2VHAn-pC0NUO#Z%&!~Ch$)yNO9tz5~+@z;30GuJAZ_Wf(c^7*;hXC68E`o1#QtY)vb z8|{XlXju*0!V~1i8WTWWAMyK0ge5)@S7>oo&5@pT#0n?>8an^0?#!JX~3JBf08JExIeN0nY54faS941q)x0n;5|lc^|;`+*#Xy z+6ey-OW)yqRKFvM#KSNM1Ff%2k%%&mNgqh4V<4^n zrChH+C3J(%@q6JHJYeywt@y6_oS91J*fteFlYMLZMU-B2JnpKrmx#`EM*X0RX@p$} z669w<7eg=WR5et2rYfRPwJik~9^NVkNyZ2wQ*l{L2-F-ADBBlD9_i|+H0@|dzH7N| zKiIB&uI7U(^@HvP#KkY)3zDH5o(Y1Uxk1Wc<#v32)e{U0mjIy z2m)w6450a~7|C$}RDW*xO5Qd>s zL@{6ps0s+dH7qzmy?Bf}14Qh_llqganD9 zH^3GoOD(`c^_2L{ud^#s1_8pMtbEH;o@j<#*Ct8;7T-3oytf3?EGI&LmR6Z(oU14> z&SMdo%qj)WlQQue5_+E3Z*i`^c|r=QkT6l@-C3J)v`0 zUlyN-ScojRyF(KpUa5t^0<0F9Pjy`z3U}M8Q+pQqsbCQYYG=kC&QB1Sgk}slQ|`2lFw^AZ?5W=VPJ=Lp%~G~W9KA$9 zp286;{KQL=fK_P)kzPdh93&}Diqs+vM!spn=K&^PUKObW?F2bhw#D!aq(* zvxW*?BB5g98cvKRL!exh1PCI2mpOl68^=p^MNrmKWEH5oQoHT%rOYatY&#H4>}~($ zFSz4Miaj20nS}i@hvXc|K|;;~{3s!387{12#&pKWCA*=9bTx89g!gRu@>g}R{VTAy zm5|7D9`6MqzwV|QXW>_(6;PW~6oT*p1g3_XVSJ@nkBpP!N7soJ+*6u=Dg)t_k|fMR zG=sEWVRBm#5>N!Jz7MyLTmm2(saDhu!)R62nQhbTMW~Zz`+ecL^r$J-eSuX1`xIGq zEm@usrzgw{gTPHoaS#ZO#Jg{q3peLszoHAO@*KS(5cS592obsP7@^fLAK8Y{#b_;m zQ5#u45KXrCL{6{cUQ*ytsi>Y1XnsaAz6WzFNm3aR%tPDL}wcYV{|9X8|&gK19Z+o-|WC>*3I_iEs0$}2{u1n?^o3U)kT+9nl zm@jLp!Qvw4GRC{Qc0*mq1l~>c(m6QcHw?X}-V)Hx-u4LRniN5m?dhvVUsOp9HK^h} z_1nflP>XV+xh$lw-PP&oX?wqU2Y%t-+w|)l#+>c#{(Qj2g7H1ldd?fT)|{``{5m;* zFqO;Y(bey+0TeF$qD%+Pm^8Nle8Z4EY`F>8#?SA{f_ql)S{duoN|8cw9 zoc%fTome;wUl@)u7lFWz=i?7KzYj0*d|y_xt*zNERIA<5?)Lu3f7liIfj-?DW?N0I z-CjriIXq4M?bjWj`{zr-kN#7u*(rRXGxl5rLbCuSE5vmOECN@mURO^?pl53M+obj1 z_s5I-WnAfLf@xPFW-4rz=Yh%TY@Muaz=fBoC$tke_&}wnKIRtTpRe}dMP4(p> zF`?3xai85dU}jms#m4d|;mrIGIA%IvBHoyHh!Z$v#_L8o8MNkc!LsFn7A-S2;76fi zN*I@~4nD+oJG(Qpz3xw62Ga%m!jV~K@yIfbFLr{Nk@;<|X3fL(th*L(C8zUXvFE%) zfz4hZ)>)1x;*(+41T*dqRg+=cB7FR(+#Js;bLR0MRB#aY8WTD91%)_{j z_sDoyzaDaJ$gt>Vm~W}uuJKvO;%&<>w#90yFxhtBb*@~NLd z)O<;zsS7}rJuY-NtgxA<9K91MU5%u-R;TA_= zg+WK{(y1Se2X^z^spn&ixEi!2O;sX}pLFbAIVMnMcArpbs_Jj%+s6$9RJC`JozsIS z%%^HbPk}Tds9d3jsHJm|`+^^n$jRY$=h{wkXhzuF^{ z2aaBgl&(zDTa(i{pVz({@*t^A@=n%=c6rfk3&-)AfIdAIK^L64T z;_pW$#qp+Ud+3PboL9|yBdfOtRcQ(G(pV~JA0q;(iS<2(YlG{FzzL8EYPWU~`QaGi z><6@2Qe&O94IP|(xLgwBpCXLI*v97V#E`E2HD})+ko8IZXfa(SE-Vf07x^_n{jb3{ z!qHX=j}6chl@6?&B^2e#GE&xE2?&+c-mQV$9LFz(MgsrrdI4S8b0-NB6F2~Bm3^eK zVShDv`E#n(FB#GOocLc&iH1B#dTqP3<$Guzw}^Y~Bw@Cv+K%hUK*6Us* z5Kb=Jl4h=_{txsxv8;993CCIo92byfO)LNWLRr;|m2vay=gpMjP?d4((H5Py;5fj)Cm`!*6RyKULUYsw6Wg$R9HZ{@wOgSb zjsbzkKvS&*+LObTsk|>}9)!IIC7?|D;jFCrGG|7;@ zhZRABew==cbLb#vVK3Flp~ejk2IBj(nFI@+_OHUIq8D zIlS&~>u-mRsiv{Mq)KsraRMc?*T!POWbm&_Xi`80n!!8Q!;w)uzGq!~KlUOkfNO~o zWs}NFsK_l_WOi4OLCc|AP$>@rR&??;<($egA6k2d(0>>nT3wGomdySEp z+Zj5AuG!H)bASC^L(z~2|7q*|Kk;|{U%^Etj{hdO*rc%?qs#`A@=nrTq=r0NpG^=X z3~F60>F3hggj7A3g1ZrEEl@|@|MA50PG*hki6pv>Pj)I#mtt!g`^E8WIx3bJ3>A#g z@IC9_?*{_FpbR9=pe!`7B_B9mOj#ljlHpj;M0u#^B>48V{mpsfBiUR9rfQ3OEAaRiXIo`*+9?yD*%gb1S=8~`f_ z({}^NAA5<%zb+XCmRubsWL&upw0Kxz_GZXq8*n8rD7jZhv8B*-L<&uA{@kEMBCk%< zkR(VX1x^kVPK%$_AXq9sLH4d3I6-z`GNC#*FppfKxLwr(gqdlAOPq#jQD5*{N=cw@ zj=`WW=vcBmY&2|84-*MRzm zm4^n6&#N(Pe!!eGayWMx-j6n10YOAB7euDl<<#tKfW1s!XIPfFbR#$ZA?OFlr{yK!v|PO(8Ff7Go0A zV46*e;J%`+aI75u z-bh;3hoc(2Bc#c*libNaw~^i$02S$*5lA+PR6H1GiS|DheaUXPdJT7j~UG zy{M;x^!#?>=6HX7ax|EEee!y6eLNW{cDlKHyUTV+#&{FrwEXWJ)`d4EC7~ijiYSym~O2@W;c z#Tw7-eeZbq`221B`D-})UomIF+Ip?M{pZPJtQOGTJS?L;rr9IZkiULj6XPqm9A5A1 z_v`$8WTDuuA1=vL;M|bFGxzt`>|y5#gc|3<+?1Ry?i{?Y&bQMky8HL(1Agw839osv zoE&Ox42_RLj8QRhs=mg-FbRY^Lcchd z%F`i%)ungud`qb*8+I`Rks_Aa5^J$jp{C(w6R<684Me1 zG~XWQI`xG$Lx&!(#$^i~Z$R4QT_(b@Lg*dkP=-40@nnEwJfFtoDwS#G9QM*s6zV;u z{5IuXl}P8BoxBT1YF(;V`F`s+r;sCMY5|+JbbXQ{){`d|Zv5}|6uzf%RVMQdQowAR z5gC^_y2Z?8%2a|H=LT(huqwEd@ie2JXj)X_sxmp}Cn2Pgr!I9v$+eyZh3R49t&$^|qC zilkKa`}BD_O;QyN7X=j!lEWp2=#Uj7JdQKnqpRV)H`?lHi7zLgK1`>UCp%2DVDKFj z(2+kc!HV%D6i((65y5bD67@7u#kPf1RbjS{&qG}+Q689ou+;k}Q zMmiJ)Y9zyg$-+4Qs8s|d3I^6O2oy@g?*No2u7Sc^g78tV>g~gA8F{8+Vn-(M=)SEG*n$c`X zSjzlu7DP0wS_x)N8L?0@(^|l3qHUsfuM(PnP}eh)JAq@TymsfrS`VlvAw$1ogl+IA zO~f#YBwe2((1KxJNgGHC8P!DbAMF5w9XF(iIx#M|j-KacEw~-G?l1ZCFDMfFk1RG4 zO9TpeKaoh@9wZv2;1i{yUoohGc-mNu41SW;1@mQscUFP4$UAfUR9(iPv(_-t%q&<& zjF1Pq_%vaus}XK0`}zglm$4}+pU5B)N{up&D2l(Z9-6F1M(t|wB6lA)3NWIl7Q2uD z_8+UPYA`pHbReA*oX~hNsM!)x$Mz!x6#Er8Nwjz%qI6CI5ho*w$3*(|2Qv;BWxPEF zBdDzKRcXXLelW1e;MR<)nDawxBL&o*cm^Ocju1{vs6T2-X5@(LK%*oC*mjJ0EPtZI zfqJ2n^Z)SwDR#4>`2!t>F)3IE6YLBa7%!p&GMG3t;b%jlorR*AgO+3wc$!{(5LZAJ zJ_eSxppJ(S$0yPvjt3MaKw*wL9+sy_l2-;jmmv~q$V}1!Bn<_H;tiN02vKdaGP+UO+JTibvYLpRG z1f~IiD$aD088freXk9;IDzd*y$%EwS?_y}3TFeD3}+KjPC&LDs`7c9zY|hAA2R&Myja>8`Cql%K=FpO zgdCFOqp^mFkU>m7PI#`Yidgtj__+AGoP1dLH1yR|wD|079^dt&anE<{$H_{kA%&?a zuDhDqT|JE5o~+Ve#uufdvp4;el*h<<)iWBcgm5#tnrm=Nf27YK94(u>GUM}z75o1% zfQNXYG^=kpHN6g{Gog!44j-1v(MQv1uW2RGf0b>ip$yyEzb&;F@JZ_7@j2TVC-qR> z^`<|DqUB9m0AiTpUgfF4!EENoOggD{Z^H%N?U%1R7Sc9(R}YTfNS^PVEuGUQ1*Gvp zwIhv(9cAp@%p}8pX#HOJt=r~#*&!c0?eueMRfc4X3Kz)8!LK)!YjP49h^&PO{oTGU#?)L#BesOJi@dm z!brs?pcXg$axwYIn&7$+9SlBTq%sdO808*VkEgr*c*~ZTvMsdOb=$Qiz1XXkt+*!Q zq{87Xnlo(0FdZrH7)n$FRg*N26%U9-ic2P4l1^s&bmiKeHO<4VXydC%8)PUInWUR- z&<{H>?KYa~BB?B^UG7Q-U7|kN{#GSQwnDSvHexzgFVk&AO_)fJ-Vk*|4C++II4{!u ziyAix%}{9lo5Yj?NmLzNaRu*^*yyYC1YZ%&5z&y5(ye4_I(k1pz1!nz=wW^^HsNa8 zDLJ9wYBG#KJ)k3YA&Na@=C)zq2*1DqEv!k%+pgRj#NS&?kwY z4hhsMgJAW+9uOjjR*Cnv;5k2)r`}D!9~8sxc#3wKLybq5a>ili)AUD^v$?A+DKGy6 z#kD$e>(JEG6WQ(x!pmq^?wQ%r?HeTYh5KXf=xA$~d`AWuw?{xJ`y=o65`2FKW^wW5 zxg<5@FFHNFwiM2nCwT7jq}un##gnPezl+=uTbSE(9)|<}O8nZGCzFyMapIl#)8s*0 zU)GoY$y@r}PR8!emlNUIpPkEHn<+`xEL6Va3>=iDM)&hmlCP|y+{8!61RvRjS%FdI z%EKbwvvw;=Hl z<&~0j3ono&&cYhnWwKg}ow2fyZzwiSV)EQp-l2ZdVg$Uin>Z*?aPqiB&?^PnG0+P| zkiTuNDonm5lKha0C%OCZD>_OUyC=@E({9^y^IyGtS*tu^ z0x`iU0RvOPRPi|S8j2@6Rv~CXuG-BDN*sdKE{7UPmwIQ^v0>s%&Fnxyu!sZ#1tg}FAcB+?n zTMewlH@>GQxd-*lIdr$}^!C$*F9feskn8aTC{V!6 z!__uH-Wsl%hk=u$Gfj5$N{(uoMSBA=`|kp%L6HP53a3-I!f)x>7hvLwBDr1hDsWCp z9Vk8r(sUh>yO^9a=?h`TEs+pDJ#LeBMUfdOD5|K~QIrcN8EGWkK*SM0)F&yKPuCj& zByQ>Olwp`-9D}zj$KFFMTj8CUX!`T{na{gzYL`#EclX83aK>F9?y9B@Rj&7Qzm}@T z=VQI^`hx4-R0DCTr@7_*G@>~*JTqiE5(+f7>fD}*1pakhl3(=~`MI@|4F^oy(DkpHJV-TRB2r(5b?r8v+8y)j$jm2AN_rmLlo zbnP-mwPfm<3_6%mp*C6HxX@t~FWL1->mgh_5YG4Uf8#~11c0n15P3OD9W ztj6ngYin^1zVJ6^f5mHdf)bUBF}_wXJy>w3&XUr2DD~KB;2z`gZJ=>V}kqQe)f8y#O zL2W2u--@%D7}wAedUblI6!5S1Dh5T24)?|JM&v4UPPAqK3Xq{AG^iE7qpVfL-vTv4;(6{dM1OD4uroc_6;vW9H zLbLn#;YrI(HW?r1t0DRfHtdc0`r~71V!l@3xD0B(E?_fW9ez>H3f$7e>SgLj%dU4d z`sANY?0J@2ETh7zPK&tcf(%#a1_hhyneTrKI~A2yoFi);AE21|#NM-I)|b1Nevguc z7Q7m2)&>98Md@o=nO1O0u+p(ye);L}^DOg9@h2 zC`h#Q6L+AM88>aYPm0#2R*LbO&M0piO39Xtx3p;pIV#AlYL1`w(+<=oO$#R8|EVIE z9W!LeHvvVigcP<)8BZ`^GcpNZn_eHEN$1QP9zuXK8=vgvmjc@NQzfa1Ol0D%OV>vW zv2%A|wYz{Dc5D!})hC;Q0d?HrV#S@Bdhv)Al-fpEh>ypHFfn3=Z=#44Q>6R-L9^4i z;{~3Xx&g~PLn^Q-nx86{f=nK&Vbk9H)RbAMuE$Va;BSTVk+SJ666;LH3lvlyXNnsUX;aSx!uu;a#WL@^tsX^9_SB zL~vlHL>ls7SdfK`a|M5>fN3X0r}(8BF!>pNCqjm-<3(FEl};sO6Ok8%O$6B=;XC<| zAr6AXGo$oko6D&;)$@P93~n(P*)2xta{4x;a+`RoJp6bIlRwue#2BhFdBq)s20*mS ztoijD!0fc`X%*i_&Q$EZU5dA?C#0sN&$JAVX>*@5WvwI-L@4U{6Z zGU{SU)I&5#faV;G*dW9y7u^3XV-Xh@ReY)@i1E-&(7Xg$NI}jESf&NE!$C&k9Di$< zh8UBW0bY%*=HsmhpKDgBQ;t1F3~Pb73|Ac0vesEmH*YA9#{Pp2A54J)#7!+`rC* zYt*U8#(<6ph$3YZk8sw#0G8?hWR@nfLXPwwY@T+mNmxRwtcxK^I^Er-Rb-F<1}`+%klDa{&&x8yVLo&QLV@O-Ns&ss9tN? z^H_Jgyr}&q&KwaLTnM-1r37!o;}U(K3MvYlX?s5C{FL)%#`ZguuqIKcyB;=MT)(vjofavG#m>RPd;@?xb9uzZt^y;p z7^8As-wT;sc1ho|61T}0y7k?Lo=^WS5YdFHc%^T9Nsrb&_N94LY>__aOOKEUw91?XYH+SZC;Diq6_;MLe;I82>LIpO{{&_z>F-NU|HQZ)a@WK+e&|Z9~ zAB}1(xm|vYA%~1BZD^1_GLXA%A5e)G74TC*{ntamn4|;s9${dBqYciT;#wceYq#J~ zBTVkbZbeCWPI9in*5Kz9i933hS1Zlk=`?tgYhf-Bnzq?pD{qpo_bam6A5PcH+2L+K zf8Yg=`)+VBr8qb6G>4`XNfceor%Aw#f<|VcOl~18L|{=lV?;i;LIDfR8cWE#Lev;# zK7)*LiQIBNMyQ1r@571q-G1!(AL7R=vI>7;gt2P)6jg^cb;>76v4x0I(#sZ5PAT*+jSjQvD!Y0o$U+w8 zE^bme#g1Y|?Gp;wao5xQB^m5*nw>gpSa;R_!JB|t*ZFm82}ii4^%QQ+7%Q>X7?vke zN92{QQU`apQBAE~1GeHxZ^=}1oR%IUTe-`2Th$Y0IIZ2jR!4yw?6mf%!4-JuYooZ2 z5EIPOBx|w21+mfscwo||7x7c=A}d({sUB-+rCeVd-4v!0D@zar%(cExwPov9O_AGJH!o!@XliRt$ zx+gWt`u=y`HFh|y-o;}uDepRW95kh|Ot8!j{c6mRrxqU#tGZ%%mn_Ad*|?TiSykit z3J}d?*h-``W#;UN5~bMKUifRYv1eH~J^v#;LFPWCEV)|cuPv$R=GYk4*ujbR z83U3Ki=y(Hqh8OBCisjMWR3^+=-kd%s=0c7V132gx)`^_$ZLI`MpE&;PR@UnOC+Wm z7*B=+2c>W*GnUs?VBhXOuyel7ZwH#h;CrYMTu6t41F4b5yd~RpJ=G50mhUb+YPEYk zA9telaDN89WCuc$4UBC?u%HG#{aF`doLoh=Su)w8w~^ygfGsyiGjx#SoYWF;F50+l zY(CH$9f3yJxk~2YzHe-O*+;!ta=Ycke0>h}*ml!@-ZJUGo&q~>txNt|b^L*1ePM|W z+J6^mEqGPHFD~E>5kcK=%MXvRTXGSxR#QZj#pW!BAdgOE*41Pr+t>k{70a^5PxL4; zx8P*M5-%wqYM}mG{!Z4)Sy^J1E5Ab}nalTmGTy%X^HTj{+vA9l>n(!tWigaUFIiN_ zxG?W1h8_z~j~y<0`QULh(MqEFnZ)?f5+p^u?>0;NYo&NQs-vCLuq9o*X-$Z{%H`;A zasxiy#12jEVMA|~kj0`I(^5T1T9)bX`6}i6*ub`h);sl2U%in*T(KJcP*#PoRF#;b z3fCaDzl$!1-GO_Xv~i)ijFD}({+Q>-N5|s5KReRS@^(-UXKGCd8L;a{H_gRq&2>Dx za+KATtv(KA-3UeGWRGL9HH+Voexl?-gzPL1I6zW&Tk4h_lvaU8sfn~O%O~WFo41K3L+!X>-LXD zhI$LKVtq3(VK7~8fJQCe-kmR%}8ES9e4|AzOqE$ZCK01Xb( z=~HbWiRZ{EOu4_WG#bNd*qIk?pkW&Hj8YX{=BoF-gq~2vr|nHW4xs_L)5<4Rt#OcK z;8iv;BisARH|>E*$*qwP5m&}VhC+%g0-v9U^@WtoB{A+(i6Gc@tsp|?XZ!95Hya69 z9AX!jNCX0rWOFCwz^}@U{x?{XujuZqq%Bz?p*(#lPFv|nYA+5-j1h|FqJ$cdKlB_@ zN}U8psB|ttS~0jB!X!E?Z-dUPqn%l znndJZ6L6sfhedx(dTokaJ2-oKgh_M3??N5|coqn?r-!^40gM|oklu%`1T7Xr2TJl; zO0FvwFYPLB_iu_{bcX z$qx!TyXXYhg+Cu96$&f)wbzus6h9|sXhz-#E}{^L146eH5jVhQpuitNOOInmmx}?? zA(huRHzsLbp0{6}Z+1tuBB##{Axt5q8eRu%0tQIc@MhIdM=8E!hZ8zFg3Jdq58lA2 z7hbZbk%VSs01XyyLp}O1DaY>YhBBu$pC2?Wj-8G<4NF4&3F}DDTX3F{oV1nw2&Lhy z*FQcOeQD{J#@}C_ZB19BF4y}zA56)YAD<5srNQCR9R0g<`!@ru-cMeg&99FKqrRN1 z?9i9Bj2VvP#>uu3g7vJc?M}Leb>4Sta|YHIudjV;_lbq&!ElyvGhQA}E}ipx?L-;Y zK+bl&0|Dijrr!VLXzbXKHg@@!*hC1cz1i`n7>p#O6PAKe{HR)Jm;EEYhYbP#ez&1;MQfGIvcb3g`Q(Y zJrTrAfVJ6z`zqW4APlh~vR1+Jq_8I(iln5P8C*4+e65H2cH#qP`vwnZ6Bh%=j}c}K z?$%5vEgRqoQYJz2vqqOaGl>1Y5h_|wb)6~3FBr#ZvCFg)>d?ugA6YL^ke#|vZAqt# zTwJH;Zf*uV&c?q?bapbfCSw@r~@l-WCS{-p#2%&j48)8ZwGCTWsu}9q54b%Lj9NXq045ki^ znyr*Br!6yH!`3kFaHJignu3?ztDm+puLkJ>OfZh==6-&ON_iE9V(ETzqjRHTi^`?1 zR2JKr^_=z%FCfW-6XDg^tK=;(sX8|x#reuNWHJLbb8&U3jTWE{^E671#* zCk<+;2j<_1YF%V6SYKm~`D3<)+P+o^lOW-3rdNL`mO;YI;vDkJ+h$=M^0n1ii{0lp zXDy1M)h8JC@^HRKCOa$00LayZ+hwAdqew^=E|#1Tl7$6K!Qu8!uRZzX_z;8n1Zmp( zm-B5Qg2jyKg&eYGK1+M<@myo9E6V=e7x=9<+u$V>H9yBowqD1qACd5=;at`@Q{d_-G;`(_%Vno2#_8jN<$^Iv? zT)J%PP6;3%J6Fe8NsB$R%&D}3lvUaD*nwr6T{A98e9lf(jZSo&)YMfAR{8E?{@=J+(@eu-`xz8ClquoL@SgE!CZ0>r3d= zH|u&#*VPm+GT)%2-Z|$h@bEA)0vP`LtI5Q~`2XZR-Hy%@LIq6_d>|jU}nR}REzsve)+EnU#@?gFAyPkTSk?K0dbj4}hCDQ?_FWJ)_ZYz_1 zSaFk;#cu2YTG!#5Hqz%UKtP>h@;yZvm{4M*tVxt~vOtZeekv&%&3^ZsrqH<--5tUWqCa zgV>hE-e0E!7KK>QpQ*7S>lag@_;q3PA1#&+U_ilmwyk;k$S?-dbb7q; z%82f~q9_7_)``Z&l9h*pma?4VbTz5e0Wmf|?!nVm^5MC6TWT3np9$`pLXe4F#WA$^ zWJx??e!GgFR3Z~Mew}U3s7D&?oeoZcYvAC(!y@Ak0M3p4LVK7}Vx-OgmG7TF?xq3SvK}P!{$1S0c5AafgqdE^i zz7->ZiW=~r%^yezd`?iQ*oP9U2<`k0%qEDwZqQ|T z%?vll2$qbXFpB$Chox*bCO zr%_-5vVd~@DmO?r?U|)_x2}qmzK!+bYSsqJOoxINtTyIk3SdH5UUZ$7;8pFNaY>5R zgjjUlWx0Z1*zOb>&syz{I$2{ z$yuPEKfp5A2gbHn$P3Ognb;FZf*ajuzc=+yJCczpr>;musF$n*C0+&tx?GNH&*~7V zVbk(aaY~8Ha?yYH=|L8FUAJ`Tt*Z|9LMc6~5 zinqxc5Xxo6XmUK@Wa19EAz3*JXC3g_`^GxkU)V9S0$x91y=muD$1NbaDYN7?A^yyd zmdg52a?gi+HnPvyvdmKvt)NlDqzS;FAx~^x5FS4yp6_3x4M@|MT zlZmSz|EjY3-P-lIIgHmY16O6G$<^tlchOiGY;|s-t@-x!%iH@UpBmo-QD36TH}DhA z33+Yq=x^i~{PRXM#7N}NJkh>Z>>zNx(E;{Uw&bAR?V-utWLB-s<;lG<>gUt``QMv? zYjoT<5Btqgrw6cDiC32{3`W^mA{04-FG#r{q+!GfC4#NB^|#N3f6mDvXed|pAxNW( zqLM9cq*5_a#FE&n>S0Vg&j?Rpolia{hF-_9&BcwS^}p7m!H*cjbR#>nP5EUzBf1w| zFMnqTae~n09SK!*grrsbgVyN~+=9h@5xl_vN3jQd`#GP$(*rR-8jbTR><=lHg3U?J{W69wm8s_XzU*A9VqZ7-5|F&Gi~F`E{zSLY zeoZgEJM|&RPI@{YE*^{}CHu$t%8E@f)V^hSzru@Un}nbk|AgW&pKY}7e9v5E%c}O$`cb^Z|p7p4ZV%zo2$o#go z$X1!Z<*R^<6l7!D=P9)Dw5AFveRWhg@HWL*P((l-W=s4p~9+uoFSVOo}{YA&0mSDI{HSA`4NE?=y4* ze~|D+Jqq#?s&uve319M-XCX6?O2pA!9C>Lp!=anQ(0q_^-pgs!5EgXd@<3%F7Y}qh z$AL*4H8NacjxiNe(Z|cO3=1Im#^3zIp#%08h}%`4o#1FXYOW!C&Fyzn<+VSse)@8Z zJ(AANovh(60h|xnP3C>j^%cNkxQr2(X!_EGRO%tj(R3$?D%dH799&T01*!@-)L_WU zotu{{jxXCkcT+D03lrbc7RlW9U#q+V^BhpFGtZz_K95k#xG(ASW~p-1G&-6b-7 zr~Em=t3HhXZf1Wja(D9qW7e@8$F65fUP2HGkdu zHNBBr-=Tv>Xoa|^L}-OtS((>}T7-LL4`K5hYX3`XZM#{t>q#8z=WnkAaO`28he!4A zKL)!cK6IO_*TrCR^Ak>MbhPzxPnP^sEw9xcIXz@Nn`k^2r90gAF!(ar#qA&Sbn!2b zGZCKIX)zh@*_3E*gjNrBM0h^leI`64Xh^R~b~t(wC+x`4f-g*Q-GTWJp?H6MGeC10zo_L{(jLN`OY z@ihoe=kNVUGRUHO1{vs!Dv200Edi>D%BG~qPq>hS?kyjDUpkS1-U6u z9!axfV`4|&E%>89r$|YTIhhMtJ$rQkelkZtCfPVC|j9+|a+iHD$(0hKJOv zhKiOt9tnX_pZ<{LZ%X%}*HYa3J%}!Ojx)@rp^gbVq{^b9h6#IzIu8zhhk;|R4^K;h zNN)7hGt$ZiFC}3~t?7~pz*KRO{JgdK=xeQjYZR}hz9Sr^_>6ZGo>Wgoc_zHf8VxfM z^TjXdftT9>r@Zz@dFF$9Cjj+|0pbz)FLf{pcgx9)G0D_3-f_nT?r`@=YJ4!-OW$hF zPuV-blQ!b+uHU3dM^gWK`7s8}Lhr@5B5TrwYpHZMY0_gTB|#@cyFW8+mfjx%e%VaH zAKM8-`BD#WfJj6AT8OzuzNC59LWTtX}@a zWvenj^iu2tzu*&I)qyqqQmhxPKnGf`CXi@NYv2zezL19qDni(E%o>)6C2To(7)tW(}>Zn?4Tg0Qj9yU5^k(CRVf zo8mV-nc`^I^7Y~?T&FRrw}gdJzS9E&$J_rDolX@3B?RiQ#DOtA)Y^ey6h{B|9hMQ# zRDx~@SUF`VIw^S1ZqxSutkv%DBB=K{%OqTTRq%S}?t8I@Qpo}7j~GeB&3i4(1QTh= z4;M=-0SPfKric8-Spv^13VRIoZNf9IAX0E2eOZIx>$=}jVlXqps9zKi z6dtOmua&X0u~V{2>^THw?{-%~%~X;t+`b1+C@QCtUyRVtFd}qO5FrpG)0k)UoS%Gr ze87m39A$!e`A|p@+D67(>F&PuS6f`|E!dM66XzZukDZyv8caP1K@;8kGT{iOKf?GA z3CU2Pf>9Ev1gP4o;Mf&&*L*}t^e|)^1u-b7f59yzBnOX~a|Q}j>H+3{#|yPuR0@9Ilm~b7xuSv;SGh>$&fB!K;zmwwOh?iDKmwHvOZsCMiC%OpQXovW zHFT6}H=nD3i*ARp$Mz?KYQi`vpJ=N^WSQNn+Gw94xSVMptwm+t_Z9S*p?PG&cqoi$ zo$AV}i~;;6f*@s{mPZaJwT34HWb+?l&`}R*fw`0i!_Fj*QHC)^^qR*wQlsC}g@66J zkRuJMchC~Xd9W#y%ej1PS}o{NcI|o)7X-s4ln#r2<^#Z$8HS294!B3h3V*Ij6GF$A zY;X{mkzlI}P#PZC35KbPGztIXoeoM|CF-~8vWKd0;|xk&hECnQj%n+WmrpL_oDfu$ z(Cz?YfZi?@*@V7@ccsd%HB=tKJOVy|58Z%F6n%#mWQ>$7{M(<7{X9pr4iF|?)Oo{DptU;_=K^Lu~=`spe|s6*ZMhF z3>RQ6x>ogKrPJw{NB~i5KnpC+@kRwTSdxzu@LiIq3q<|`79s6LI>>G`Nwo1+1Z6k? zDpg#zvs^CfV(@9m;ne?On&YZ(V!{w2aIO?Shdz?H8m9z#RbXg35~ToJ7~H}fEUXG+ zpWi^_5)^?|$-K(ZzK9|cE1MtbzH|QbSY@?w{u`E!6C%bCdt(qGZ;6z%x8W%E>4z>1 zdNW}_#m_?y-L}72!XLc(7CZ(f2^UV`MkNaD9tJ#x>y}udYZrirY;m-2p!6YR;mHb* zCTQ6xrpp#7b1zIemrydl->2h=+tRFpi5J7zrml9OKT&ASFLiY+;=gm4am6bg+a;rf z4Jdpucwa17{W3g9cKRBCfbzw+(^d{mcq0lpR_U@u_VnZJS)8^*%|Y{=fNO<{2DQPU zil8aF*J+Uipf;@%hl*z|nhMTJ@n`%pB4{$J#*Et`g)=Q!h1h{0UVXC)>LFf3vq(P| z@cEF$tP$P8LqVM1av@+YY}wo#_E#P!m8;LWJRcgsG zJ9odI429D6h+`Y8QrRZ-*?8@rH|F9)XKrk)ba)*WMiy&#dpYXg9Z^?XZND!~Ene|_ zJ{K?AiDtRog6D-Pm9@2F;~@zd7UuCaC?un~DiEtW>51bXrgTM@#lM}(uC|e{XTyDI zKbF2hGN1XDy3PjGvMW$-*U*a=i@HNyB*R9UxP4*PbG-&nY)h&Ssa5e#{)aBx`Lb&!!q{ z??jp#PY4-Yr0#EX^IX^sfYNpfa3=dvlR&I?j~vj(XDI(r684AoPqUDThc&C? zgT-3N`7RuC`OwuK^8O0U2Ny+4;P+0%W+eSo!fIzaHq@==u028;?P&NWP?@hr*?& z?k35JI`zJ4$s+{rE6)LuVRAlDH^Z(i8&^zmm|4}(>D-0|7dFR&Z`c9d`M_@RZ9Gls2{yEyfLs?3+n&Y!l!r0Vs!j;LF zo>=x^arcLs^`;;q;nX>Q{>kapa|@dEt3-Hp*TDI}#Q6ZDGA93TeY>%Yx?BB(db z!P{8@URsYnz&qz)Kb%!6#x3>yOkS#OyVuj|!9BOGVL!>W*?4jKGteWKj_4o81K!hHKOul|6R%sEwt5e*|iK*&Hid^Sqz) zD6mv0OkQexT^?eum(gJhZ6)EN|OQ5_^`usB86g(q>;pf(doU6eD8U~0_iH}ot&MY z?mAPZ@iskGSdtR4hHp#oSg_uki0lCg{Mcf;q4t4}rd>l!acMl-)teo4#JZx$P_B)p z4#+MGCO)@mCu*!KGVqoq!G_iT7Y$WO(Pl3tcOD6W+GIV?t79i2zwnoxo#?c?ZIPK% zkO`8`uLu_tl+8HYZwsjU7S-L(ijO}#-3z?4%dkufg?Zn&SP~z8%GZcG78cdwru~Uj zaL}BG19b8~$g9N%ug?cg_&DtCVDTc-2AnT!T(cfa0T#@=PGdp&xz+~smnc^$sH^SoYV zMq7QEzWuWPxSQ$*d_5oGFBmwWfv_c*c@rnCjj%T|kZ$ zWt+@PZ=`!Qwat|RcNO9&4+^w%mv0ZMY);&HxoV}`GX!rnV{&G7)fA!g1_-`I-Db5#*En`g;+uZr`$8mfA4cHEBI00Wb0g~f zSc(xE`B$^@e}^dPJ7eH~X5|b_0G9tfW1t|l_aFT6AZ?-H$A&nHZ*C%xm9ZtB5MRTK1X}Yf7P1`MIt$bGx~@%E%dnFDL>u|W+RaGd5<;Ywhthfbda?JTbqShra#j(rl`>C1!NLK;KDWIkwma+^=mfvT1@C%lvV!x z=mmv$VrWC~TLO-Wk?lX=mnZ{S1&s;7$_ubi7CrJIBby%uAjQJ8mZ;p)5txROEJB=@ zDeULyiIy?^fh|-Mr6T*LA~g#QKw5J#Bw;YXRn+|dhjVrfg6 z+@@(uRp4{b!}W$0O3s5L566hz3U5Rg{Z6i>K7tEVVE|2Kbx{~*V29u%k5=W!hRXw{ zEGA^Povx~LSUMx9T_7vRa0Op|CpG=;wwTz;Td5^bDl7~l%2H=ECR2#2rUC{!=tETc z*K&x2rISy7eI`U-HX5Lxl+DNvYbX=rXs~znC^l=AbW+Fabij``!;Dgw{~$?X-!O&lfLWJBabO38Yp~k}MN=tK!X3kw zEXz)euTiAJoM1NKdgTS zH48a~=GR|g6KepWC@VlIyRI!jsk=$CickQF7DjhAMzjh!0PQ55b^d5=&C}`X?0I*5 z!CH*|X6^h-3mj&6ldn07qRVp!VRI=i#o_3Qqx zC!sN;t>Dq1`Fj096X|b{)X$HX<@o%qg{D^0FmpaH-s|>nu*>(FqH~5Br12Dda&+_~ z5soQH7X7=B2-kR{h{;WCAh4e)Fj}t!7xEd!reOMYRP;`SyY%rJJTYa`t z<*w<%1`}DBR`SOHN2~cX^_4N&!z8wmwdi8>Pr4LJmyCI{t+|khRi=K+(~Y7jOEvp+ zfc-eFZA@eQII?{K&T+tm$|Eu3(IiYmt3WzugDb4%8We4C5}TXg3Vy(vNfixvF|!bD ze@MiOKlQI$C`Olv)&*Kx@c=K{6nunte0xvv{$KNW`$P4|L+7?q!jh51M5jYsck{6+|^BiHVG0CR@ff$Kj|d`Ghu(%s404a+=(4 z=0EM&QEA{aWGNdH{|GK%ruimvR4nKgvQ#u6E;&UN@(oPwkJ{m>;IT3bm_ra#8BM}e zE!Y-DQCHg*Mz#bwg%t9QRC&95-`TPc(ZOS<5dsPjQ5}PgV-BNeoDEzfX{-eS4NNrf zevhY%e^Wc7@Qwr4emV&bW~34(an^2x(teyM_O0zyo;Uf^!0$EjGz#?EMd2>Kyk$3g zYwnF}KiKS$51xl03M(vJ0U=LPWxmg8bBcLiP<+TJyC@b6SXzc#j#JVf&Fo6>$PO7c zV=lHXH!)K#WzjK6pQ^ms3Klxmc%|c6d4GHp+En4!CquY3ctz40>d%Ybtv!P+osJIj zRhojQ>E^m?{)*RIqrLw2k!{K$+|9V<&p4j?m*q_1SvOu&Cssfb>vNVv+j1uAo~@Me zCXJ6MgSirxtZcV{HYDK##S?^kgPVrj%Bx(Gx)zRCQD=w8qegMqFngu@<$OU(>$Ct> zny$8f1+wAAwLo-swKGH2vQQ4JI9$>u5trB1o3hW(A0qYY4F78I{&&bDzM0|w=LiQA z1N;9oa6MkFrHHBw27)vMhjEcg-}ctIEXPmNC{p;#tz2X+J>AaTG*;a7JkSR?5)2#! z*(#3-`8(SyEEEp+bcBtd7m-O4HZ9G)o9sKqo=Mj%K%Bl;A9El#~fb9t@Hh;aRl?tdhVQ0XknNL$Ze+ z>lo=Sz#yZ!jsQ7eqy_`sP7h*ekN^RaXkOS{187UWK;A$V!Sgr5o$#EJL3wNg-$A_K zTu{%N9$-sYRVKn&3++cQA1Kxp(-o^Kqx2rAgB*S*7im7}IC=5caeN9R>3+S5ctM^D zw+s;~={S(w&$1D814?qBX2=u? ze(KLoQN98C6qHKduw4pH;-?~#tl|*~_BzoR1(aHjI4Ew^)=&jrDi~2vH&-z#1W>Se zOa7o)gW)XjbO<=;y3ww+7=lBI5TM?Jk=&nXl2U<#BUtSAT0d5q(78cnc#qr4_~*a~ zphd9JT+<|K>qL_!ZTYg$dfKrzB) zLlTLoDE!0>D`FIK4lfp{2x@^FVN|3Dcd?9fAc}e@n=0#*s;^_rt zC4_#CjKYNbS_r{Fj5(duXb3^b$?CW(i>&cB#1{V)!e$4rG|A8NQEG_&GZP9Z13B@h z`Qf+6Uj~9Pa5~^0YmO6>9g=h*t{Y{l!rKw|$%`2#G!lYq9-$;caB zG`2zbqV zL0^&kyM1IZ1fbCFdme0;WfR9T@E13kEJwk4>kl_NDch|04ib}YE##6CQfn0Ok`_{H z>JQS^ySQs!I7jZgRthAlsU(Kg4fG~sSd+etuSKAR_-7guY91T=lF7)ZLBxg~s4u-UPS~Hm+3~b7e0I-SMXwu5IjVT} zRk)M#stG4v?HA~EU%ytpCg9hxU!OwSFN57D)I4Fh9v4kY=R4-@jT(Apm`<^u;kDH% z=^RT%QXj!j8toh`KwAQqXACH+0`ClV8N|+aBe<}wndDZ8DsQe6di`sI`S&yxmRx92 ztQDSIOL^M1ht;dkebAi7CwxU6^+%^u<;&DksLRC(V#H&_RIe2$Of$wg(<7?HeLrOr zabxvEJ2R;j#>8|sm96BxQCr&Wb&uEnJi$3TMSI_V_TIGS_d9EQ#5SolD}yKSF~ilb z^w%9LL%-2q_WTiQqs~S}70Q8FzIqvxYcz(7+U|CBxVY}$KZc9iTJ3iJTDg+l zPE|p64(ZI1#ppkufYgm;cVtUTVCTCdHR%GGOqNkQB@OPno^x;JR-2OQKO;atO6@pW z%zV1UuQ}AMj*jr#E8YJ3nCH=S-Mu#@8<66M3o$sZ3E8dfH=i}zU=!*h4KVEzvx@0| z>3Y3>K0?GctYEeu9ca*n3s)h3Oi`LAFvAkG#I}vCS^JFRATDK!D{?WbX9^0n3ia2> zxJq*W^JgP#r9>YyLtJG(B-D<4HW3;o2dmHf*HGpFSM? zejn#Mw5MDyr9uUxXeX|v!xd5H2uF5D>yv}b&n-1ewWvL2q%H`8&T)@YHeU z)JF|hrX2Wnc!o5SICH8tL26NObi_)=#Sp0{D_ZMK)a+v)A@n+#8Wlz?Hgp_NX} zzrpR=SzOc+rRlPJgR5M@p~!>2L2ONq#;fHA%~xIZ2`9JdJOHnj0CORii^JqD?}ykY zpW~{mZ65arclMlfZ1U!JcLnKj(c zEw9!YMj029a#c}NljBlV9O15D_glz*OXQvFKU>*TnD%|F+hem=w%+s1%u-$e6Ym4A zL+q>&PB6?*TWzF8_|P%ans_kwCM(>%ju^_nPzX(sp(jZpXgWbu%{SN}+CEKZTWi}U z4Y4cIk7q)B-S}BePEH+Z8=9R3oFr?lFhMx^pF}D-m6~VJ+u4GHU{T!lSk2CbBR3y` ztV>joE6y$mPF}&akB2eIod&C(>P=MiZo)9{iIC>Pu0ZFGIPh{Ct<;Fxr!+Yv&kV^) zwvm!Z1I#yAIH2)R*OydTt#Qu<0e4#Xm~Ug#gu3emE4nHlT+nf!3nI|Y&D`R;X`#XR zew0)7VxGF~@h|zIo!n%tE7?MQNG&4)7V7>3qL4A`ZizZ++4n(+-%|IfGjS^P(ExX^ z1yT11-&yKAhext*niXjpV=u3_IKU-cF@a#dA+7)EmH9NS;rjP|{6hJ6JtlsJ*4Nzw z{>SyydiVQ5b+L5k=i=G6t9kK9n=zpFqsGgnL;7p&kuy6ga?JS0s3TJ9BXoKw4USd# z)l5!(UTxR$)CAsy@3H zFj~l-I&sYW+!OflL4I(C0@Ey>XA#yc79csL4}R^$BKy7uKV@Yt*@SOA&V6KEs0wzH$P&yD78FL@RGSkZ)-l1UyI8%yPCKk(@nFOv5Y2q}!v;)-3H4j&79&`mXh#L8*Cl=Rmnk1C4m0bZ=-YWm7%u~u8ZC6f; z|7q6npqn23Zrgu<&-0y}E9TpM`mfeF{~iw#6aD`U8`J+kj;U9ui$~-BK~?JDC3yL> zfb=V`RQ?KC74Zhx;yvYNf&xJ@F7`LxImu8c5ocH-g)c?8ARknPjFLsnGp-2D3V~7u zf*))MDRe-<5BTD#zh&!D?bgl@4@33~%~MaA&Wb$eNNptzcK58MKWK7*dT3lL32vgd zDD;WNl`th}*bO~(MybJXsXwrB#YJ7uRQV5QjVMh}xxTO>!g?%v%P?TYrAWsuddmZD z%@tN_Xh=cT>Q#MV7JOfbR3U=U5g>T=hD=Z~hKphubXe?#rS)P!Wqp|@uppO70l$!{ zoF~M!1ZFx25Us8yB*qD_01Sv$5fTy^F%>if8gdC3%YfZ#_!ASxuWpD58`Zy&KqquyWB`Tz ztZtYDsY-y1%;D^NIO&7!u?PyI7A&F{M69GC*hoq7i?fQ?w}+t$PopgHvY<<&L6Qm@ zC9*vo&`F|GF=*7tq+_fiHT>l}rieGdDvq9K?9Sd9gg#<@u3m+TqG6n{T(_i(6l+V_ zfCp61Ud=_GG{9S_3ra{;#sM|qMMHfi}ei|M@wfVm*rPWlm~_8!e=Fuz5+ewZIfkNsw$97bGo#XA0idF!?s{x zw$nuryOM|UvyhO4+B_6CatBGB&IO6GlL4GKocFG$c6ecU7GtQ8J1Wy~024PPja(Kg z=#huJr%}*?GE~Ik1S9!9D#QZL(Rpr;Xkin@)F~t{ zBf-Hrb6ql~NjtjRj4+P)vzsBpB4m}s-Tt05FtpM(6YhSkGicpuU@e93GCMRUV|+P zvh<1c42|gyif6!`nEX$nL=Siz;B;qf1TCyzB=$@{7qLb)ws~o#WDzC85NT`u1Ue4d zPKs#URkK;OegWD$YDG(Z#yj{doKjgyTC-g9ciJb?c@HMS<6M$mWnDCnCf&7@LYJ>2 zNHFVZQe4Mb5io<@BKD};n8ihewXW_S%?6FeAX-QI(M?VcER}6Sl7})iqE#=inXIpg zjJGIQ5E!jdwqjh7rG@M`$GHj#4YWum>W!PLaK7O|$~TvroJ`n?6Q&v3)j6F_z^`d8 zEj2qk8oy35_bWTWueiC~Y;Lx0;J=qFiImHEWW(9jWtr}8kNJp_>}as_L6mC2fvDgO zWGWYON@c52Np&j{XMargEsRTrvzF3yB*j(Tr-qEy=#y5Nw^eaw(sUZdRh6f}=A}53 zR5LCtY=G5}D@-ZPr&m`bu!EV>i?1z=ZF$Z87U>K%*|8-#EAev!SEqzob69%QlIk8a zA}1S6Y3hx->e;?EX32GPvHAIuMVU@C^-fLoqp&8DHARIL{7RIyx)#|sgJ~1s%6-H5}w;%t1Sr%UZ?ogQe-P=4lg|f=#_q}H- zM&$6QZ830^mE@o*Vpui$pqo=1Nz0?efwWzInBNY;imS@gRCHxJl2p=r=9N?ksGX_8 z(ip7J5wOxR?X6t zZ5kZ7OdLO}I7Nv&MK&0?3g;M+9h`{unfD*s-&&_t$6qO0w(CHFdrP=dTX7>>#LU)KU>3l7iO>?MuYQ5 z-P6?M+dLc3$H`D*cDL6RJWu=M?1%r?=W{mx`*A-HewN$s%na`S-z|i_FPm5Na28f4 z+s@ri*XjOO-5yUaXD6-L+E!nGmwq{W-{gP&mCycS`SOHVz0cRa03&0@M(*->Iyi$d zWDQtzH@tfPyi}ajvC?ms>blt?hdE5+MgentIopx&!4~Y-J38aj<({TZ1u88|h)R*UB;y8yI=q3`NcFHEDZ3JpUR_zNb90nI2KyF1k0ky0MivSV;Y3Ff{exQHZhyTycMFq<+%=ahKx%Z89>y1#1_VX0HcpJeU*& z?`Deg=-tO_2e9PlL|?gQ)b>;FK+OJpx6b}hb9*>>(tZ~R3fpuj zu^C+tOmE-ljK~<9bm7pW9aotKtIg8Y|Gis9W5+?e#V`43nC~D~5Aw`g;i|^1+H|3EAU{{e^x~a8~Viy9s`_hg)(d)jTyF4NbOe z#umb%tFSMuEKGh1tSnyk#_Li(dcjr3W=&Mf)#-fO zF8g|0IVYDJ$y?I7k?81md1KiciBTe@q3F7l)}MLfWin7`j@Z_impS7y!192fCDBGX z+%&$gBEY8@AT(IQ=&-;-{VTp{UUSV4@J%&ItV_2;3Ky5jtbioe$8qfRJ}oHhbtvq8 zl>I=4Av@|wCyhSCA&SrVy2>n6S zc3>c0b=rq5iAF|_#BO`oz~zRU*TRllQzOjNPKH%d_by1snf|h%S4!>9_q1(cCnfCG zQ9xKGWNu~TT+89v`p7~OgJV&OV#++2rNJwyQBGlGjY%VF@{N21I@y+juW30cGCC7b zX1*fTg*iX=FS^6TU%}&{BM-W3MoF5Pl=N z2xM7UUbr5(`&##6r&Y$IzJtH-s2{x{zeGV`@clp__I_xc zzZxCv3<$?0>w-)XdgF&#JT%o`{*}ElOlBgk6C(+iW2HusVz2#3R_KY0`!P_NmV?%; z#vf*wCgZ6&85*!rH{D~UyN8BG%J5}nOSQVM=)ZGKQCiZbD4+P;SU41=#A52SofHpN z4hG4Xmu_NoZDycBnPdl~(J>&AzahB}Bb(BMJp{2dfii4uR@9b$1cJm_hs!_O#S2?$ zwB0T@9sEZ|z&w_er2)-hVTSqEfRK+^)@*bfr>f!}>U7!(BVNWS6OL5J-b_K5ZePB;B##YhbBqSfEE;7dCIwX6 zLq*%U+GZMd%HtRxkH8jC$U71kr1aYy{8;B98G%SloalU^($Vm5oS)IqR>e($-=CUa z1xnF6`@Cufb6|eVjz&eUvitXYgNKXj7+CC^Uk}vnOcM=xxQfxg|P|wE>U!-t+#;>|Jwg}ULWS^!n%E!?p`O^Bd66-uvXrE zP^_k@uCwVW#=+z6e0zSdOx0dJ?z(ycM3s_4(pE2}oeV{Xj=rMGSzlHMY(1)0%A1w- zTUK>r;qYBHJE?E1Y4EUcz?%j)P8!wBf;%~_&hk*~;DEA=6IP*!*RojmHMBA;ovtxP z!!}lW+hoY2ZWd5+E1+KY% zn9^N6y%6JHIrdT%{V3HT(S=F!dc#M{QkL@`Q^|bu9|?#<2v$#}uEOKHY+{+SNk1d^ zxr_P0T)^i>cOJ2yaX{n1TNjRH-M1@!zCbaEtOFofoWU_y7rDi!t<|QT_W6=8E$+9zd{~*9BFe3ReAAaZSsMD!Yhjr!!%+){t_(eT zhhdp*nl?F=1c@}2wEqx#fUxUsJp0G)xw{yr@%+y^dx+GdD50S5&fP3fT$vb?!?vZq ze|vM{o2E;yFEV~BH)O(LYa$FZxcKk#=^xvz({P*9+8J3G+5h+C_X4%qD%xV$57f_{9{?S3S-k(l*joq34FvhZ zF(zha#+Y%<%*>9NVq9~~%rP^>%*?!IjG5QWc4B6T8S`!KzPeZMk9&7jQ(M}R)T8NX zN!@Dr6>3(l$+vg#II58)9aP$6m8$&^-n;DV>pR%WUgezh;?-Xwp5$1WuoSG9W|6JUecxi~r zl)1jhbs^=hFW_SbJFa0;So+AbNM>o^7iOj#kXxrJxCf!gBMzF|?1&>SNQMHF>A}u6 zoOIx*3VN`-wHXf3l$!x8xhCDWkZ)ORiPzm)24|Y5ZSY-4NfXbk`jjSKC>ABwH?X`U za#l*dA##t>$7dXU9XDBprL-2lnb?jA?97=Y2$r8zg4MH@R{xOs&4)0sl$$jr$d-~% z@hEE)9fg@X{BOEmSozd#AbErzBxJ;#lTK1&U>c*08#lVdTzdEudl@Y>b5r!*u{}6M@RV=hp6HAF~QX&un(; zRk*b%G84xH(!sLpAsZjbCVS8ZfL{GX=&4vyo8~cN5WDAQ#%R4QI63vY$ZvV zC|4qn>$#Ts6^{NAsIoRTk5gM4N&U8t4I$^_{lp0_``uHj2|`IiIB69#(b?j$*P2}u z8|p9=PJ5&@G~xhIresp{Ta7ODx^UkypMLh&L+8X6t9n>9a~n|&N3)>Pb}{lalm02A zK0Mz)YHD*4$>4 zCbKaXE^~-~SKH-=ohl7Tkp%^mI;RI0&*&p57m;ez@CtK>Br1}(W{-~2CMaPYQ+rNC z#rQ(6a>LjnZT+F#?d{h$t#*QLKb5Zmjtv*xdPaMj=P~ejaB3S*MxWQnxzP%dQ} zI1O!#;%G}WB{SB3p*o1FGSs$t0@RsCQz#I{Zz31e(JW#TnPqV<5)u(T;M2oPOh%5f zQ+%Vsqq-;mOoV2TqDf?2xp7$6ma*=wF~oe(3?V3(%~-qg+P)KY457zuRokX#C-}`w z>CxEt`p@B|jTTO}_SORyQgLrj7YqWrae}dMm+#9Pnuwq8(|xP4aF6dJ1m5jsy)NMK zc(=Fr)fqUDQj3D?A=j(`LiC_dp`c*v7?cP(U;21ZX8k(O8b*b^^bJF(ok zje}p8^AWF@rf;KeiPDl1wv25yBYUvdbZrsgT3Zqe>k(tWzbjiDIeh7V-txm*=9e7k zRmeP>?s53Ji!NkF_wU+UfwwOqhqi$6-zm}%$U+~$oY_R)Je}hBq({&iArWS8kn~rS z232lI&Kd9=P8-=OBD^1`Lu(_tM79;kn=$FPZ*(wlsiVg0l>4mbH%pDC8QXI|BpvfNMxB^8ZNFNZ7Kb zmTyRFYIn|s^fYV3$zAR)ZM^`yuK1^nrgvmsEQiqpcAPiMFpLXlt)nSckE`o$IbtzM z{t*_W=j;RmUexX+2K)%G2~E4^O=YQMZj8P)kM) zr&&dR37^zIKXtu9LOzn6g3jKk`iTio$k%lEF2s7x;pvW4Nma%yA2(gr27W*WId<`- zd^8_u(c9J}B_p&%{-HavM9aGg47TbPFLyrPtjg~3+4p~5w<|w%?&>*g&O&j^{Ez0X zAd#~a#&6HHa8nNDgW{$~bke+NInCdEU%9!ax-B6&NKQPS|6=r?M{zG$b1%p(p{(1M z&)fZL$&)s%Ehop)w%rEaNQ|!5*m<+HxAQxeFg;h-&$;u;R;6>g=eO4xx6F&m%Qj^K zi?uO?`96!vkeMXFdI8VBblxEi(V9BpYr=23)vZ-*41rGRcXuB?6SaIfUl9>52&W&S zukjLls4|pG`{Z^^r>ETOBPYUqVgyS5*40ziyt`U@2x)9QfUbhI>owuaRw9-;bb!>e~brekQxgW`YA*fmV8Z%GK-|y3ygniv! zi7#2B(R*!L&&Tt5qecCfTOY7{k&l7FyZQWmrIEiuKyFZq)#8M$w=7TPR*4F%^RX<0 z_jHfHonn^9_ioaS`frVdiLV0qJsfaV3W+l7RnmhjBra%KssYaw?9t6~z~)yT6$(G3mp= z#{sAq-ax$09s<7VU8#gYr6i`4mfO*!i560L_}Oi0)$<-3w{ z7vZYcj1A6VvL>T_T<}(ES5e^ujdM_l-s5qR-ebm;=?HxV4ZhCEz~!7^V=}kA6a9&w zmy6eYujQrltQtrA&y%c>n{};)7`EhTTFwJ`_o}{0cSq+oV2COE*9jX_F0losteZp} zvZkv$l||~qjD?yHu}#YGSl5_t8_)oHZfLN&3yhv+jxvEF4Tjd)TDnuMHvO9N-}*a z42m|5Nb9A^x6m4AHqQOFxhqz9E#zwkpNjkTzFLNoFG$4jL*o*y;C|nOZE->X zVot*9QEFiU$5JCHBpe(>C&YFGJCL+ci37vvsv@1Zk&MgttsJ0Qy^u8fj*8tzpng+M z34UZEPlydfqFDc85W($0(pU@1#8>Z{Ze>vbj1ULW9^gWy$hxQ@QR@;@vh0~?+qN|q z@@mB&Xc4Q|KA6hxDO0G%jfPL-jft7K!4^YdG*-=it#HTLi_(H+VvC+mOExnkpG0nI zhf?Yq)()h_{ivFgyhxoiu<9HG_{PlxrPn}=1ddwb@5-@DH9N=4iv7UtGr_JGmJo{+ zhKR%2ot)s-b3};wqamh+Vs-<}Q>Qj(RlkB>qP(vyJ^>pt@Ro$cI+5vav9GHT7hUuy^AjLHDU8gX+W zl)6)i5pq-zHNrHtd`&-VT=cfb=QHojG>FSI6Js6Q*g#aAazgQJ(Zl;r{&~u2AL?fn zReriNZ6{*0-7Y0cdws^vcqxeWh{j^Rmg$IQh^G}=V^JEc5VhEmpBBjEj^if+jDsVk z$s`(=-Y?EPiT8yfX{Qx+Ppc7B$X7QG5h@(5ADS^#l^@d=Z0L3hZU&R+Q zlp-0AXo2jwh?2u!L*v4Gj~Zz}~)sW!HiaLhxFS~t*kE17oS4=pVeD>!M)n+-d9 zW_3SdYN(nR9cXj>s@rr!#Z8B%rdoGW^Pvu-Y!{6~f}`TyN!qsbw`Pq^vRIQovV$gF zaI}g7zkOLUX_tw=7EX%Q;6bE)2+lB>H`y%`?B*H!==b$Aj!9xvR^g8PkkSDo4o~v1 zF+**lSn&=n^m#D0|UH{t5a#%xGh{(vEH z{pELQOPLQcj1jX^&SKED#*oOSG_3`g<>Z zQ{xi{{|bC(!H|tI@e7BqDC!pyg&)PI1>JV6j6$Y83eJx$os|{(hNJEQ3pLuS)2E6^ zX}s7fe3Aob9{WAXHVIXt; zwCmP6$ln6D_h+8dRuP%}oSH|9)yUg;x&EK5{FNu(i#Q9El#5_fm2<*N{gt|q;m&-w zk^PR9R$}Aub2tsMzAPN+{y`_DVGu>M;3$JxN=G;(ZExArAlb?O=zC1k5Y?>9P%mn~ z_TQ)DhY(P)+L4z|2)sW-iS%gn(6*mB1-*>0@!ud}_g@^$c8eL(zNP;2!EWtQzW7Ch zUMVxGzpCv;rvA25wDuo+T@?u_t>n#rC8`@y^K&Xnm(Ex&D$TO67}3{g);g)WtY1H4 zv5IQp9NavI^QZ$k$h#6XU?7|NO%?F+jk1=jADJrq0H_%-lf%CErXukdT38BP7H;9AET$Pn7%zc>fG zO{q_eoKV;|rIArr3zZ-0Tg;I5S!zlAA96;j0{2Vk2S?s57F3B5aSnUX#~IH5v>1|W z`ft7Y-Lvo)k*p?rMo+q}mAu`N%(KKP&&%l;IyDkMEKhE1|DziJc|LPW|u2o z-YiS=CS_fPVZ_U+Kxs~lGL6Lf-u3MrE+{#psj<+#z&5bDBIk-=hXtY7r>0`lm!mf# zop_JNwPPZ4ZEEDkw(UN+QADE`aV2xDWF+~iya2GkGUX@cP@V%Bpu<&LxX941bEvu0 zefF~MGTnXGJa1mL(+SZ3#B9UU%K!|g#k0oigfHd-O{^2_IIxHPo5M}wE2XLHorPhU zkC8^_lYu{mwsHFdOf{d0m(uwk;I!9*Dya=mURdjD?QE?9MM`fo&K*Prvu{mbUSK)+ z$En&Fode*9Tpk=er&emq6tG7pDZH$*Z z&54P{A9kTv?A$zymr>#KKGUWxz<=eY1`-*AUMCu?xVDGxSwxE4>>s zfd315bD=wC$8ypd!ZpE;5xe}^e~Oj4wg~>Y>u22oW)G)xiQae8+b?}f5KrG$X&fP< z#QDz+yrZzSeTDBG%{V3JDef)$c8TrEosGRcW^19d6+izi2h;Vx=gp>U7u3=GJiok*dRgQZ?lE_vhiic_@=^Bg7IW6}WRez!_-^bllnmve-)< z-!lH#aF1>*b>}<#$0&#|4H-lvGmvyqzWEmp|HHHRLi2y4KJxr;KtKL(j}H&$|J&nJ ztux_3!h`$<@%Z4-t78U{M^nN@m5L&-cjiYoBSiHC=gZ=~y{PZW=H7Z+*3xeBjv$T= zv;t_y+P~w={;i=1fkODOpc)Bm z3RrS(5jdQvL^;I1TH5hpLX(j3R3Uc|%v1>k4H$bOiB8{eA*E)CR==XZmGmkZL!0^Q*8;h z6tj&k2^O=cGS3xraC6hOz;a(DR5v(_`nh(Z!xjd+hb}G-AVbH|L&6b~r7JD1Egd{S zwX{zMuBxd30C=j1)0RvXo5%+e>YX(%gqoc+1flPWQlsRdnyZT`;(ZaxYl|HCnuTpE zi!dLMn!Hd}nVM@QtZeB;t*B_^_f&^IO+j0K7(C#wfDdV(ALM02^)|K|Gj&d$?JXF9mr!f&U7xR{Zb3M;7;-VOv2W) zX1Z5P;}YYU$^Mbqr6#(TWtQHEf8sP+Co~oA#a#N7XJ7n6OP-({mD+Z~)&42mSmgb^ z`kF`Nt#lo}j={0fvFGXCpZSYpQj%ZAa>4ixow304)$!)YVG}yF!$@n*{gPvY5i}u? zy1AA%e3w&LXzMavxoT279bX`*HdG@=^(n%siU6(?cZxlAKIVKDy*S=y%B9OWb$J_K z!EZnM`yxFaY}k)ki6nTv%TR`Sv$P#%m><7r=>-V|#xBYS+Z!0yug~LiVw7ka^Y5Wg z>HLOP#-3Y}GuD-#Nys%?4Sl3Y*&I-VT$wY>2Ag8Qxm}so5fg)~*1b8I)9Nn+Ui9qM z&MgZs?s$KIDIBUKvP-FltX(M%ne-iUQSr2Brh0-oo!8`Z?%z9`mW6q}F@X7r>W@*3 zb$)$<`=pk&f)N{wr59cIZmy#3LWu2Ev&0sBDiy}XYnA9FRfl{wdES)@%L5 zSx|zD{H~&H^4fO)C~<0{T77zbYK7(HL`v7DAdh8vySjLbn_JmPv zw1{fv=ZMeSvgbU{!9WtdGLikruw#A;$^@Yt?Y~8FfBP+QR;rx|pLA#F`ZW)%H@-Eq z2no$|%S_0>S2=^izOm=l#$ImjS+AG9?MoHacmlBEg$7+)YF=l|s_dq2@l=;9HGY`# znr?JyzQFIaqYNGc%ut`<1AD%EIv}v;?ca%TvD{6ae!t!j-*F1L)k9fHr6FfVV3^P26>!loN1_-87?lP)oL05b@j z@lWC8r-QOl^-EU`ZE)N|FQm$mh4ZA%fA@g>-&A0S*ylX|$36$J{lD$=V!f$p8W4sb zPH+EVo^!jrI1{=oM&uwcjAY#OQxP5Przn&Db(gcow~U~k&5O>qnxw@qBelJ|wmjC6 zdtFq_kt8DwzX&q2idpv6OM$)gqsO2IZ@TAUI5x}-Ktd&QhVc#5q^>t7WW z-JfSG4rpoc1i9wLSzx!DX(Y^vEbt0fQ=rw9uwGNL;~E5s_ofi{E&qdm-@>Ov>& z;Sm9-+=$IP>-_A=svU%2>a|W$ENgT`fRcSrAX?>Ou;*prOnYSi5V{?99I~mYGdr$5 zWqZ1~wQ1POB0lAT=Fko$mq-L2UQ?@DX!)WAX5ers1Qp5Ghv!3$baj+yGJe)4K%ynZ z2c|^{OEzR$*l0M+?=ih^`jMKFnEGJB-deoG#a5kj4br&^4T1VCpl> zU>+WQoV3In%2D9J0CJIksVgV9ZGaO(3=~mThq=-!KQ-r` zdN$G$(P(!K;djFlSlOJJENw9#X{Mg4XQe{Aii?;2*r2AGvrD(&aC9Eg(C8l*I3T@n z8*2i8FMt!SLm^%%dEmPgE4|S2tb%+^G6S@dehf}GEJ_)Go!1q0d+<}kzBdZ$cxI+7 z2y{Se8DUp+rpnH(M_w7ZGsxdcxt`#Tf&$5Z@#AjR8fy!x~C3(=twX@lkg7X#WR4JX|!?TVe$jZ!%r z?MZu0rxK9E6wb1zoXZf%^h*j-1Rx7}16|MIr{k9vrimY4&DacUovmFYUa!45Ueqnv z1^Q6TJAfP%ds^sGEHLeADb7P&aq6{gG=MAvr|72y#@ZjX&OxqYM zCLZK_-+SpVV1!iG9(;`DZ}@{{Y3d7^Zh((n$D`Eh>rLXHL$s8ETPxkEqr9muFOz*P z2A7=B(!pqptaCEvzq=wLZx5`o0e9yQE9h$PIwjpNi&n-xAbOLK#n^BWqJW2+m%MlH zgOwnXnPZ)EqIH^wp)uEAiX|OLJ!Hzd1J-iyiGQ|HQ;Lvlx{u@pB?RU3%MBHNl2UF; zRSQga)RDAVqoqOY(BAafZ(8AUTUkHt^f_E)-%@_sWIQN@lBLN9R2g_HOpmja2+uZt zagT(2d2Ty%y~p0CpEA05!?Gx|ow8Y@>r4s9wYLaP28pI9ro)-Vef_mEDBOJOc1g%7`5~)4$wfF2+Ud$rkxaOOd``(M>uGXp=uhI5E zV^tZ!rW%E!H9tVG-~GXB0)19vC)%2AC> zR3(-AoWT;ymw=Kgi!uq@=<}1=MT8wS4oi_{Pc$`0DtPUgC+YSPp%#VTEVVf~agVjA z3O;seMt|R?iRF{e=hpD%gxB|dEAk|cyjJ{uqJK`>EtB#XtpC?_%*d79{2Rg|%^T$ATSh|#ENO(0G z8ofYonh3OO{({>myGGpGvnfbv zsOG_IW}Vfo7)@sGg5yG$4J6^6ZSK8XJDvP74=ZuTGj3L>QyNR&tSvfQRsyJLh$nMe zDf8B=cbk-uV^9ClCz(;^iVwCR-B}{)eX(dIReYd&h_=v%|9F-op%4jiVvOmCFEjYq zX&-T$x?Z^u>>J&$)Lt1HbT*JIlT{6jldex8;b)Znrc6FJKS#32J5Oi9StzNYyU|_! z(WB1oV9OkJ5%h7zlqI}C;*zx>z zp3Y;{tn<#-A8olu4FB4Yq}0dm!F!!gWkBll`tcgxE&RG+2jMRWEbdZMV{(uF0)&QZ zSI>w=S&>Esnnvbw_d7z%{N25nYxueOw?K!6oM+E4&y<+CI;MqiA<2%|QB*^5^Z$^f zXj|jOnCLf%LAt6>>v(<(-e0R0TO(GwSVFuUh9Fk*-&W{FBys(Rnq& zl4I~A?E10yOa9mJa{zJ;bIZKyGo;QA+V9$yEN_Cw|XznH9j%efg{G85rZMXZb*dJ|8c*pO{w2vK6uj--~VeRQ} z&;b##$FaDmGApe3(Rwejhb_fS*sb@Z&l9H!28*k_%^9+52;Liwtu&4guM3Wm{9!GOy~0L!?_@~u|*YkD9Be~6-0)WuF) zqk)A{2-0C;rPsApCr=B*Cx9o$|7OCg>ChJxFi;`V7bHQWoK5hJ^4WFK^-|TxSV#g6 z4rv_KyIDUZQUcnBvf5TTprEg?KcejWI;93DV=YnacD1UvkR%?TH#Fyhm9sJ{gA z)6t)rQ|{=&990p&P$(iJj!@W)1_Kk~Yzzu*rDBHlBnu)COy|m0b;5~7i~DuzY$VZ> zyA+mIe!)S11tH5seF9iEh>AvQ0FqkCbSlTaeu*&I~4UOOnvF>0J7 zcS79IAy=~-$V4eW5NlJ8f_JwG%=Uo(iZw|6zGi1|W!jHYQn*(ELs(__vH3_7RMHWvb;jP*+`UpePiw&UR$ z+X8E$R%Z2kIVD*B2Q~(<8i=17ue<;aHpN|r0Vfe+4Wp=|iD#9YUJpiv27XJV#Z^RJ zIzduxK~y^#mx5v$yUv{A_?aKXpbS?trjA(6HHPoe%wan0ILWZ%D0dnImC_y6fUe{F z%UtIjg`KFB`Xb-0KK2iGZaosFF*YFncZl45^`-ZKS%(;zCsnQ42C)n~p|YO9C+5#6 z2$`Sa_aj*_KQg1(Q!y0A>oEJII5cApK;=+(FBvRe7-od2feC=c2+{8uzBL{wVg_B;sO2 zjJfEoQA%hfB6^Bk-A;^-RZi(fl3`>N(7tj|cnH9?ZSbe0P}litBC6yO*J#X=Io*6snx*L!#3+m~gj(P3W*(8*bH`>_VAkY5QyPPuwMzj#>*zcpX8tz-lgzU>L)jX6J(T?dIRI$#P19+;f}>~u!JF}{ z*pQSY*08y0;NaT6%+Mi+-X$53-|;b1rBiU<&Yh&WNfYF&O|#dA8 z^hbSZlYhv*A6X zJKa3CfR#Po&GI8M7og>vtOSJQ(j|MWTAC_s_G{(IJCU5I5dM@)ErcH(Ql>V2;+WPl zSPq|Xak|sAoUF@%j}gy9s^Qb9q7VQ?mZn-wx_gm{LrO%n0`bnXiAc_~&a<}#d(NAi zYBY2m)RD@GaKY1Ia(nhOc8B7Ne+++^?6M5TQva$P@{91|HXYO-{?f7DvpPL%U?5~w z{gl(Vd^hD@%Vo7}GpeL<@qE~3_fVL)E=460!*V-il*{eYlOtWLHrzVBtDoL&EK0@0 z%#J4j+_P2j@Eh8<#@iVti6H{{8Z&$G5Y1*eD;pl4+LJk?M^}aKnE4O52K|2VPIYw2 z@2xJd9``#cn>F&O>vFl=A6d*k6ecX0%5^ML15N~*?`|O_o?79ts?1#0^mMmbZY3Lz z;&*^2cBe*L&v5J32}KN2B^7Le)+qK~KWpUJn2E19vt-Cb+MI503StB`hr@FvDkDK; zM%!M-$nBwF7h65d?ysid5J#S4UheDLURquNJ^X-p2;pa=v!yF6c5FPtq+k^5IGhS0 zcgGO+0*)~IR+yT{b{vtB*5B9~Zk3mVKhBXsr-yjUu&yi6&)4%eb-A^1y@H|d2Z4ap zk>NipOY#jhKTMGf?1G{dU>*ieMf~f``QB%8F8^M&D(rl-xa~-OKBtefmmn=$Z*~iF zS5g$1W}~Iz>$(1Q|2tO2VGHBXmMC&SFf%7xDB#bpv+LxKhcnYX@8XJKeAk{-3weGX zk9FYzd@rXMz5Wl6+bUaLcb#bub;kpX0mi+IbY1xSdjSE@hdFsRlmRy{Gd(`H@dGap zWd6^4Ig8BaV#Ii+bnA1~&urONX6z@g@b@*pPioo51;rz`i((fQU`>$ea(yWe+bISQ zJcoA8MmX@0^1w+<)Q^WvvWKROtNQp{whYf4OgrnCxItVgL*l`CL~$hf%k3%91K(1I zj)^sfeuL2snSZjr(0FVr270SD!4J-gr<%@i8MRr8*%(ysrY6%eMbqNcVhBpGhnr(D z9OXV(Zw5bjQ%hPP?`Dgq@(FC~cEP9K`D@n|~4R>)#;MCHw;1bngoCPNo>D+FC($XC^@GC2{oe`_CR2V~`dePHsHATAoM&~z z-7hc-j6_LtHERvDyqHJ+G>@0@rfR=2j}$*OFQ{=}E5QdpdNZ)(DNKk!m^D?RD?G7vdX_ zUK%9?4>)9p1QCDnOg`u@I+Fi)y7m92D*gXe|B{=H{eN(X=?Xcf$e^drQCw5CP+NBi zH06DwfD#Kbv2(F1kcHQ^dSUw>E%r@XRVq7PA6{JG@EJS~`&gKZpt;uAI+mN*;`Ul&fThd*?d{m;1G z3>{q-W>I-I-fD5z*C{ndG97M09C9{joEro2a?J7cFVeOqN1wb2?#%JVf#m7t00tN% z>Eyyo!AwB^U{T~ogR=A(+2>MfYPuF`)0-UphNsb7YEvX-@`j6wz#al5 zi5Q!J5N>rBSqw@ih|l)}GQGbk0kEu(e*nz*jhv0{N{=%JHbm4E>8E7`GxbQq3T7P+ zzG^v0Q8d^T#!tcwT0*b(>`Ryth2)aLHaZnY45B@@gUIa762vh_!4Mx!!c!ynTl@OIoRFnH9^DE_%E;6XmFrRMI&WeD!1C&h|D61+S ztEGErUaO(yjGVC2mDWCp%d{>kooLIEwvu$vo(j1Vb{#o~Ft1F>%{jn;7g{Q`88v_E z>j7CXHDtg9HfPFUnwL?Pux8|Gwos}cENoInuJMYABv+W_#OWp(KW82Bw!4sL8%9r{rf4SFWU z=S+dhi9@@MS$Q)UrTar*ggL@H$|1`+9sB~aq6wFd9vxK%y3AnANj-PykpmN`$UKbF zICq1`VZm1QMCZ4Ss516xq~b*>hFjB^j*MCCiiLQL6OOM^ErlKRv)YgdhcnMp(=67RoZZ0hg}9Qv+p1A#m^uNy?yN4f z6UI?ZSe)NU!;S`I8yh{`kI;=+6@ckIA71vN^Yhs?DJ}C<&E|%Vac>jr5dWUH^Zunv zedA5PQA8)XP|VMr&AQK6T6?LQgY9X)(W%)!PtI2uNg{3~X>}xiD4)1~m`NQM;s1zI z>n=>X{Ep(RO*@Y?Nr+d!C73SAkB>$cC+qJZsmSc2F|pAWvi{EeRKO2KaKWx zOXT6CbHE4B{M+m0tXDyU!o1zv!+f4?-k536nuIZC&c491$e!uGr z1_k`KTOF9B{i@RIeQ=mf@YN&us;jC@tHdfugr%h+kOQP1%%B8i$|?`2NzwYTCbb!l zsZW3GtwvWsR$^NcQ>h8R=AYu0*L>|6)vMxvH?~y;muVBXp1Ip{&{nf=Wwj;Wp(p6m zvTJwp^$3HaC|a|3vgrUY?4`}3F+OpxAQ(LrV?osV_Gh}oQd+aruCK-TU=^&W$FO#P zs^4NnWVnfADCFDj9d+v+iR{+&lly)Q?95+Zk*1HTY?e(lI#-r`JOa!jnBeRCDl**h zqhqb!z@C?dYd!g|sJbe{VtbRm)FJ&zQnR5(5&U)`IXKa9)>57bt3^k&6Uj6r`;}xC zpPgy{0+Qe+a>zV<-_epPBG8uy{ylx`I@f(fZp-*|X`j{dr%>ZP8>qF=eUuUalgf7V zhL`haWxG0ISCjP02l(_a@YmPx1Mt6lQT=ZUHFI!q{+|poK0e<6w_|Y-0-usAgOLVQ zEq=w&=LfWQa=ze5C1QT2q=-A;(8Wl?g1oEj!ikm5^NPO1Q&0p+Vo0f?6B1G*zN6^b zNQz~Ig|T2_r*BUScKV;aczYOA5!yCCOukxL9h!L@xYY|cHqh$iRXf#w+K**4qT>)| z7z*pcV!&sRml}}sN=B&GA==VbD+JK-gDQ?ts+3r^e1m3Z-gt;yww78vlmP zL3qfAlo3-DIyu~+(HN-sQ>#9_uaHgCl|2gfY=}lZNfh@hBP7t48#>ewVH`KMRXLO< zL5&F-^-`8w2XWLOG!ZoHvkI$gC8&!z7m^aY3^%idI7Z%t#eq*IyJ`xmtA%FvVxtr+!zb zw^&8DOKHrdjibPcMev-3E7bMbYUK~j@WxRZIiY&xa7Vgphn({XT;Y_bt?A|wqhE!k=> zNjzx=KY-DO1U8*M=*MKKWTaVGze39GxDK71IvkZp3KQ+uy`&@@{C>TtV#M!svY~+= z`&;+e@H^dP1;^7Fm@&S%G&bd?fHXTkQDa8Uw|$7+hzW2b86#+*?J$9BzL>OSM>jBb zGE>`%%G%>i{48o!=FH%b`hBKn2iF)asA30qtTd+2N!hQSU*M>4`vV?Gr9Q!kSiQ_d ztwx+{NQ+;Kzam?+DjAOn_=&%Y_!mF(_eoH;jf2cVrR&mNR2H>0yY@!)pY|QgA2T=} zvw4gTiLd>mT+{3Mr+regr~Kc#KPN`I?sm~qhaCo{(wXQ~r>d0%ol2lHJ$6f=%(?w4 zoQr-{op8WStD%8vJ|SappxB3FiOOEViu~9Ni%oUhXU9NRF;ejTh)467TIWhwrr0^b zPgLPT>Y$d(XohFWyY5RwV&H~)7_Zg_;Z0pv#92Fdyu|N{5@J7iLbxw zZ;|+O52Ikxv#Nypjq=>Y#)sqgw;Nc3L~%~_LBz<`jYx*RXz0(8yfQ(M6!F-+KQ3wv z+$BFF)XU$o?CMBJ4bj2h;E&cH&_p@{>OCCEUdsrnJy<35?6Ey6ee5s7CN{tEIi9EW zJ|8^i)&0GC^YQuH^*Y7+x47AksWtY;EY)<+sf<#u2CU)p(fi0}#17{hnYLcN2c~FW zpZzu}bw9?P@ql#1<_ z=kaaF_uoro9=p4E5ARM7p{)M*M%9)cyL4ZvCePC#_#8U9&X7+UY>l6x8Emz zpb57TpDa(}rG2?<9t=Dv5a zJ(n_@1gXT`qfK3iy`8?igvX<%_O22wd4GO!fXZuaG|Emaw9FquzDsM1- zq*})|k}|)JJ+29PTeo7nqt^63p)aZW%@0C-aQ@kEur35cU7MjoXSck?A4`yym|7#h zvOt0jPzhOj&@@w|$_GL41oiT4nY|SVVD9GgJ@c6Fa;u48_N`R~xy@io*uh$Kwja$3 z=tw+X%5c2ilGly1DVh`-H!lqze3m8VLO=5=_&N|nfy$apGa!|;dE*I`Oq_6hd|hJ-L%u2r?QCRtEC zfrZ0A!dvz?y&}p88~2$&BL@+HSbV}lG703jbnlZtLcbqBe_Yo0CBurT|tTZfH8>-x_B4Ez0d1F4dUG&#FH&l|VASqk3t|Td4)6JY4THMk&=UX(= zIJZ|iR`2xNQvPQ1;y;&><7k~doWyXqvP)}dA&muG2E+c#755q&(xD#pDy?||AlVOAB;C8pGxb1S2yMV2gi+EIAtR;`= zTi@_SSb>l4?ZD+E|FCxZ5{Jp)d~MF@24JFE^tz^VG_xej-3o z{i)i2HQsjIu4NEW^d+mqK`lj+|)Y1Jm0w zBAOjHcz+F2Y-Uyj&2g~CVfBd!!(HKzXeG=TgvMX&!sL6&9#)a{*Xfrl>`^?P!EH*C z<=`uf2LV-GV?z~8*DdfP{)DB(?#kS#cNhTEawL4%UWd~%ezw4=xJGT7gzy0Y%oHZ6 zkF4?j)im3cv1MaZ*wtp;*>mm@UwaU1WQ4V5nA7fa?6MVD%Mxt=$ib`vV&GI?sAOKO zZyo4{YN-mRWW}nw@rF6`rgiDjc>88}rfGyUBhd}z?l5HlPpVp_J6m{Cs;%G-Ksiy$ zs$$YwB?c&lG+Kwm?SJ6@s5GDNMm#IJix13zpP~ifJ4wvI-FL4giCmn)yg^@Z3jS+m zlotaOrC(HH-gH!AmO1OB9+Y0_TAX5^^3V<`a_@0xm?vM;Z=L|LM?}l%hff@_va~K{ z#5aP@^ZCq`)=U9+PE;DK4JrJKmxYS@o=4tE?Sl)Yq=ZCxvG$C);hvQg`lW?zVd-TU z>!E>j=%#r#><{0E{Pm(O&el994mw8jmzo<+V*>fhxm1R0u_$jp-Y5Hbw9p`sx^TwL z>=LYhoSgi6%Q4a&_AP!<`1LoKgzE8dK}x>TNr5N3#g>YXs5PbeHZfaCzv_0sZu{k- zzqR-2&9T?}F**-?x4rpt5!-vxB)_fZ7bX(hknNFyL3OxkWlQ|??+%6Q)+Mm!2T7Z| z%cpfg(`*+`(*^Wy*&&YiD1=kH?wIjuzoGA>UmHfgoZU64eCMrYWu%B*9KZ8SQOPXN zc@GJ`yOhAS;F&g`of#O9SHN958aDAF)$*U1Ga32g9&=NF*Bb(Qj5YK4o?iC#^lz=L z$ah_0JI<9dKi}k$i2z7kx8fPX-~Y}!_}?J`aQ+vBJqIt}|5zncD1HlK9UM{aOW0Wh z9kwmqm!c^7;zA`b^ZcxI$pspx4@Z=*zUto-3}K3k7m60jLMbsoj00h4W@fSv6yNFQ zz+gBi^~tlzrinHGi;LcuHoo}3tpdHPtJ{-3lcX!@)eZ2E##Z3yU$HLa>TFvDva^pV zlF(SeSO`j^Yg8HdAd+hp`!tmNW~zy(5)yXFB=$d#YvIULb^xa|77f)UVKN5M20UI3`3i2k-CkeGQQEMT~}`EYXj9MF>YAA`KY16t4qmOcm%EBl2r%PiZPui z*|tQ*%*@Qp%#0Q@Gee7+nVA_ZwwPtfl3UEok}YOgOqTTeJ9pm9+#l!8iO8sq${!h3 zk=a=*_u6|cRyKWY_Z;1M7^^e%_VSXb9O`m z6&I)!XGcvbTEARz^mN;pgsi3I)cG`3NL|!cbwW1%4v0aelx)mRuDwFaCfZHIk7cR;z z{EAGI6)Uf#!r;*bj+ujsDwi_EWCn#X=o9(C_)n`jWF`@&x+5IXiUBO-b!ZpJZUXZc zuD1#hGt>uaOcrl+)phI8SaNfG*{Vx;<|r6+hih~ap4=(|rATo6*{Zj66y?<8sAJs` zM%JL2W@6VQ`l8o@?#A*vnT(=^PE!U&nCQ zL1sB>>AJzwlGElSKT(@qlcF)#kudUsnK}=r1scsg^a9VOL2DgbZ%j=a%BIkAI!#0u z$C%<6bLLr1W*B_jZROF5dQMKKL0JmtTHY)m7~wIxJpqBRVXfN-|?U zgIanM*AT+V#Fg6*p-{m{u+t zI?Vwv4!FPnnwhshe!Uy5D}3LlokdAzC2k11zv^uO$q|}}FVZq=)!7a%?ShGlm89K(B>cWLr9fqMdn{3WWMT-ZQRA=GpC^*-z@WIVBLI7% zs*#(mA=YS==pnq#nyR9W{yE8+6=RDjN&&>1_jEJ|pLx8SmO`2P_Eo&=mSP#EV^G1a z&`2LqmAHe{adTg0GazL}oj+e|oEN^+)b@+fF%l)x@CM>&ROYON(0nSlN{wh1MV7_| z6NO!4`))R66c2y1Jew1Aan?)51xVkzo4F72w=&lCqEFpEKnA>c_hoCwMqgxdMz_Qp zES(aypJETsJjiLbt>irN=e`ZB?5a*NX))(6%SmaO%dgFk{qSg7!e3{vYR(+BOLD&n z=!v-C^D{cQKF%t?qdJ>xy|Ijwt*loWwlR@PRbA%e>deGbY^l%hms8HCckrCVn;5+% zSC=ts5eo|hkj34u@LYcW9yEEJx&8?JG~xXO*)Z{nwC^&+m2ayzqp|nkGb;dlD(PW! zFKyfXuXh%go4Z|~uF{tmtBw=jxAe8`rygWSVP&mdw1WKif1Ru=1lwF*-b%u#?yt@B zIKy%31Cjfs&0>Cz*0|BHVd!@A8oCuQtVS>2F}DR8j7b`dgO$bn(*Y{d3(Ohj=a zk9!tahegpooao``Z5HO~7{!Tc-c)TYcjLd7R2gJzaf;OSPrPA0Xhl=m0E!{EvdQ$H zd__N3Cmzkg{mEs{p^CfDH_`{USi)Vqulo^K188bUn&WYt>#zeeVB_+Fz426H{+?Xp zAI0Z^#)_TGiKgO4wW5T5hgViCQ%?xtY7qkniE_3Qa6C-| zFgbJVD@^ftN*aJ`93=hd`jtH~6bX1%7)lG0g*Wes}CymkL9*6Dv8zShbLUB(LiNu=l`nEBf7pI(+M z;{R+~UbZbL$|bV7TEO7sz5BMaQ%AWz;PY0#9Zzc9Lou?7)LMhlMm6P3BGMiF_GjmP z^N{T$wz>j8xbNW1!Q|@WVa7#K!RO}jL-cCk;jhiCbKzogU86}KGo7zPM*io=-mFf4 zIp)iLvB}%*Rk4@LcF*0-d#83bH*D%QhGbdd7M5sEb!%H04&4$&mRh z1Q`^ItuXtKlIA-+&>@vW)1r7J$#Q) zkK1ee2X#uaX{# znqSUI11hIYRoTkSd@_0~b|_nd%S%(^Rf$Q*;ZJR+q5o=gID>PeN+#e6hzklP5c>Hq z3dfwqH)bYa3W$ceHsqU}A{UdQh-7cKvv`*NBhi63Ht?1?k&d&^O|0)sp%Hpxj|r%f zMB$F~tphZp{cD*xPWMgAIsetzI{uv3>EpR3Tn1j+IK4@rF53j)jpVGZ2Jui9JtUy+ z!ezlt;mFoNsty{(3sqEIRs9 zux681by4Uo{{fqg3CAzrMd>OunHOec*XtvR+>Y=ov1hJy#KqhJXV&Hx@JGBFWi zO!|773319=+c2WyH&`#8YB3D!CNhk;shSOWSB{5wYX#3&bJYs*YLW=Lv^Yw{z$r)T zA?-ANOdc4c$OBHd71uKFlX8K0vJ`GLc0MRX*^KCpZM{cQs|SSipPsK}a_l&qlVuZ@ zD)E>V>@h{Dj^cEV6%6Baj+reIW|OsP2}9bd!g5*7Y>ZeuG@NxT;y;_8FQ9$F^eMYn zBvdPpsBi|=)v0mXmE4s1^l8#{OPJ}#XDtzH5#^3LSwa%JXxI(PYQM$t(lufms0JoF ziMOY9RdXUFt=wkV(}4NMB|)q$Ql)qzR$9{Q^JNgrYhx?uRh6j5(8V4&?-*_cc|6`e z-@XTW<7zf0%!+-=q%@p4-$7f2`kSC(m3JeGBUG zRP5UlZR3iM-)TU3DKwU8$zb`%NeR%NZ=i)N<%97&+ z(3o)BfVkMuEW`h(J6%$?xxDT4Zy2(OuCcf}PvR-WzJE4>q89hhz6PR&ZRwQUpx@UVH|S4-^TG6I|7ZU}yVe?a!c^78OFo_v%2 zli3p|INJ7lcWhGJ_kyw;aQ`P+c7XZx&(lv(Q2azx^{K1efBP)Wy6;3gdWB;t_c<6( zXF_{l!H(ATPj3bJtWPu7{U+VQpDy(QoO{Z$Ak{T%!Xp$QI%6>qJ<4!M`=&cg(IEU5@7{Uu$s$h zO7OgAL%s5s!G4IOhUdGnKl0&WjpMOa7`sA2m1CfIoJGdFv-10vf|W?Zg*`1K$8*U2 zE!bs}0%SU`94X4eMmU$6*k$E5 zLxtUaoyWW4pg!^vBdFe|+97gcI5q3{AdSNq^Djih#3^nwST|HMv18k%S@EK0`Czb`Eq^fgmeDPMp^L+D zoHg_Kzz!Qen*PT$LoYc!e7rs0|mLpDQ+=n(sV;Rt-&xh3XlIP+Iow#go-Z818= zF^Mho9$qCN05@z(ASnmp4F=w_&9FkGOz6%x4Z*#?Z#8U|vHwxil| z$cpZA$Ow1bn&E9laf@QlS|Bs#snJt(CmL~F2N$p6j zBKJ5G+x61>wsc85#fVrMuq6*!EY_3nPvE0kUpj`AUI>gJ|H+m*fZtDxGN!&bEH>5( zDMxWeI{KvK-{oj{81D^RqAV>ibeh6Sg`3^qq;po%38VZgxh`!<7VyHem& zxxpV-+sjRKpS3On=6{2wBc8X4QIa!LW|K)A=rN(lP|i|hyQG}-e-js-j%jnp(#t&wU7@08jRJ3iG!btJ+% zK~GHEuwD*M9?(oRr@6ItZamL_Wc-{0*^|J832{oKI7(fLmrXaU=BhZld@xzLZ$GlP z0MMI2%TAiCm<7W<)oMy{BGU0&=2l4o$nVLGGcRls9|3%A2=4$r_;9fm^Whi#Ek zmW6MogZ?#+Ccl?jv!AA(B;cHAKd`So+(6t}b)75169cRn9mPNth(coHMke32B2jFTbqkGhnU_ zDK3Tql50b3l7nu@Q%Y`@u)6824ke(Kz5OrgGe~$nY3+F&k_9X=iB>xT&E! z8uTrBW3J^U`6oTFm_(AuY=q|)pf8;eM7EJLYK4z(Q_LskG_~J@Bv6*;^b+s8Zz@WL zLa$t-6uXMQp+b9|(T$Hsa5rZ@+4hS51huCo>zr$UH~JFei=PT(-a@`$SRhc@A%sxS z38)>7#iiY5lhK?ZMfZxSDeeL+7|)OB5!tvFdiu|N;8hN3 zJ~Ark{oqwQT9cJz;rDLv+uQWO$Lm?=fdBgoYw_oPUeWvAx=a6a`e*2x3+~2h0kaWBsc*AO;wCsl9mNv!WHu0BC9ngx}d(+jx^J3cL$ z<8uCoj&$koSRx#9ZB|ojS>k{M5_vL^EZ*&83Ez1#TXKg|;U0&ryOoqvixZ-{F*NnH zEl{rI5@|u{)3+tl`l|Z(I~W_0{p;m}>03gG5GC2{uc=<*dz_l%QHhO3j?`h7@)TM^ z+E&p>AIEbs%KNm$6n+*;=gqz8>to6zE8w0j)|sP)#aF92^wagM#alkFr7EPPGJLCbXt9=fbRE4Q3}p+9i_%I@tW(h2K= z7o@Wf6n~sCE_&{1>{gA&l8yuc}46sEW0xd@lDz0P2&_X^WQXC2CZSR8b~K zZZJl}W+XR+d7D)aKP{8!J*#Symn%v#Z<3ueSbAAiry{56kdH5yt|+Cj*GtUcrt)wU zqVhAaRgKU4zD>U6v+Q{Dz4VpDFIpG$C8s~xMIC%3648 zrjxZLAtj!NL&jK!sGVt}D`$wq{F8p@YmTGi*3)1@3FSmOb9N;MKcAlH8>Y}3X2B#h zl5#Ke5{}I=hsV;MUiKvhs@70h01 z+CkkL7=K^}v`A7akH9kcy4fk05EEWDoOP<8Cv(wgi>zu;x%FfUdenlr2KB7mKAYgM z|7x+UrgWF-Ms_e!Nu66AfFj`r&=Z>duN6FQwF}Emk>nvW9>w<*)9MR+`w|Jj+Efg+ z01?)!!9uv(KHW24^Nc?EiJ7ad)-@;^ab{r?Sd$7@wGFI$MEQ=`yQ;lyROm7xe!m!`IUl$n*~lF<7i@LcHK zQq=p9WluusmxjNNNkmBEXT&ZvNmJho z;E6hrKvFPMZrhE+)JAZis>@JfN!N)pnvwCDE$L|IW;tAXcPT0rV6JTlI?sS}rAWtt9!Xb(&2 zXAR$|H^9gz)d)aSg=f@PM9=1AXg)Qk%{M=Fh>2-)iqnjeZ-ia&$%NA-MPh}8(3GJy zMPk-LLFi8)fDgE#Fn|*km}yamYC~$tM>yO(IzZ?tIeQf$CC1%3+QJpsNQQ&&$S5#f^xi+hT-dl>}3RBvH>0`9)e;{)kQLk%NTy=b(#>bf?H7 zcz-pffm>?AtzqOSg@q^~{7#ME$&Wzds1xt+LX%3ACHrmnjx9#M0RaXL&w$$zVL6W^ zrdT$VQqHDJ-o$iZJ^;~hWJK+-k%LnDN>{y=7p`>H3WuVCphkJwDxtXx+iWt3K7Ec} z8wajqk**`E8B7yz0Hu%8fwQ2f`c$e~VXaIJUjdKlC6UFpCvGjB9sL@*8!z(V`j-~n^pynNbh2TvDP%Nbb1B7wzPA=R3GNo-9L zP|+?DOrOS+J41oL21-f*TRXcXyTTkGi8&Vk0**co*OP``Q7L>z=B^2MpLW3vACeo$ z5wqu3T^O%=O2*AZCz)Ly14kr%KFr<+YnreG3O+zh`kHycF4>d{dLGnm$F}0zgZ4s zD>&eib7gGMV_`Owtn|IlWb$b8^{;~N2nn*xTF&HJ!6#QZ6p|euoGxK4`W#=jRvoX42bK8k2D*23_4wai9d1{3Mh^u1 zW!EkK-skV_?jQL4cvW=;35U?F5OYp;FG}&Pzx(C9TwN(tHM`+Xt-L~`M&m_Ex;WSm z1g44&KPc{CdSAqiZ7?@w(l{dIg zSZI)#AUP1JUa6Sa*;sgRNs;j>jKgU)bwDkM@o(x6LlY5j3WK9RaCbJNIrG>0u5WZvD#O(?+z)&$6C19;h7QPD_7P3xv2i9z`=a z&E$w0Ta1zJ&f9&WjM9^u5{@OPCWXwjQ+193AhCCXY=9nsg$RWci}oZ8o z{eVOA)|fBkB%YSK-BYA*=b<_nB`mz&?3Dz-G%uqW&m@xYu zY}<-r!yLjkQ66cTVXh}|M$#C8r2D3ESsgVIY>$QCc(Is&Jz;Mwl0SOH+*=eX`D%1m z%BI{UeYG98QK+@is8c_5tSk~LpwORzYVyIHj+yrv6%hvRR9gHECejRCK&@3eUJ0h0 z&HY#c;HHXdyw+Ogpj#weMp9Yb|4_U>zw%ef5Qa7OYh5LK1IfblFH}jcJJYczUUsz* zQ<;;j0nQWA)CiIG*SN@qPz@TT^fgkNeKm)K9KXNVJ}_HI){Jp6t;T0+8*uRCDilRG zJn=N>Tbl9&=Ip=Cw%ud+DxX}8GBP<~GBCd}Fg@5Se9u#7y*=;A4IbQbXvzh$DL z+0A5L#IxKTRh(2ii*~sGRYAd=On2`we^~U?eH?h@YvL!Lb@`{@T^IVmNx&K9mx_M_ zs-`a!p}R<=kH?A&b@pglGt**BL+^33A(K#I%+ZdYKmOzh##eEJ%I(5vBXOB35_?IFWt3|0NdO1d{xoPRbJE zFv%F~Wnv;Nt!}cA^O9`Sb*#_r zL43e2=ifl5N2wEB(Sym{xDLt#iu}>US0V3#kx^3K8N?pHkCztTO`jwg{~ey0$=!Y@ zqKvXslt6R10Ba^vL5`89*B_fQfhvJfgqAXK-K8!vYEh_VbdJ4le|k~M==@&_*7CDIHUkr2J1Vg!#3-n>uuhCGSoacN5NYa;+txP6M#V@K?LJkB;VH zKT+EPm`hNX{w3_?wuxWI(T-rpF-8LzOi~4%SMCC%m>;wp>&#`TfHZzxWS8<}j?CYc z#~Z$^bcrf7l|CoOkG13zP`;r~UV>FQP!Bl0Il>Km6JO-At@FS?w_6x!ek+82sDnDw zfzO!0$It87UE{b-+}`2&=2ygZ4hwRxPP~(j_;(2RKauPIZ+feo{Qt-Svj6)aZiU{g za{)J6whspB@3zM&A4eUnN(gLCI09-lXoPBnaU7ITO?ifPmBC2C(SA5uk{C+1B0U2W zMIJqWRQa#Fen-5)L7YV{gpzWDzPN|1d?*Yhh@qMkxaykp0wMJng7?yu2Pq)eCn)*K zJv#Ty7Ch>}tZ<7)GY^3u|7xBFTd2QLx~E#YWt!&LOp{&~b?Ym0j!OR#XpzzQ!(S2PP%bRxDI zRB+;o5?ggvx%DCheRyl}IR$OF8&u)uxNhyar8vpC4KN?{Ofc@)7;9WHpd;)Yd8tIq zs+=`=*-u+vFf$lfLDibl_WJt42rscY^_q4tteASe>>tE9@p$v8t3wcJF^)Fn<)&A1 z4|F+#=4od&4BD?w7YLugb_Rv3*s!8XvNCNtidkD3@D0*;Jvv$?^eQ?c;T@eQ{eY-YDbDQ)t`%#fFI{u+*H161nLNK*@Ou`5{ z*-PkZu4FxO`$FA(aC=<9yk@JAoJEyJ+mloV+6~*&zb|6vrtxXh6?(umGyqcSdG0jOLA~fPtT0Eu`vt@MNxF-HXxdCd z3xPgiimTMVHGpGd%iVYct<*|DBioPI%~@T~59bAE7UddjFw(6*GHTSs88JQ|Cm|C1 zT5>CIY^lu_iCvkJC(fEg613Y6WA9?!q1nQ>mQ=Pc9-Yj@tnuUZE*(qK6V`l#x;PE%?qWCZ3^nkTDzaTld!)53ytX1C3BZ4M z26>~NMD>KOEHCaybTC(^qfcHr*%P{5qpXi-nms8#->grcFUIdbEG>WJX3tUuo{jtX@$!@pYfXP`cY5;6 zj!n_ZrFbRy^J8@0WWXrs>3zAiadwCJcD$H&SLAa&xB_hO8s78}#cU)YOHh^7cB{2y z*0{gVc(-fx_*m!s{2X>>;O2qF>+1RT=zfU!+j-Tj3afGB1LyTm#FsVCPA#*itgf0b?N~MMU0sdG=I-* zB9*+rC415;+;77j9v_;2LXO%FOidK;peVs#KCzSx11(<@po$El@Ucao!X!V?_rT3r z2QGQK^bn*>kkrL2Z71++8W#3!=mR?YeEAO7{HH}*f!BNvGKKxs^4NcuC*RW>)wbl$@ka3_8u4e z%;YWx4vjDrzSQ-f^#lZZmZ5#WV^RBc;)X`9BTFBzS%z3soncf_s}5-9%By> zx7W-ue|MnHPAB*_h)t1M#+a*Rt`mN?a$v7E$=!>i+}X9Vl#O5_w1w8pUsgT9gW6mp z|5tI)wM2YAL_fk-E|D0ZipVVPNMoHaPo@vZh>sOxtas)v(IN)ii#Y%pAR4qV!x2TK zvC(N5q@}&cn_|bwJCui!)WQh^0imrmT2j0@%`j@_(cnI~9O-dT%{A;0`toNe;0<|# z&$!JBpaG;cAoC(wG13m#ml!z49v$4(7LeIN7F~Ae@MYG5QNJiQf1!7eNnZ{v=Wv0e z*TmN_xQba>&M+w0`MiPI4oBgKXv>R=)eOrZfI0F5gDs<_(iCa=38+OaT5^ zlS?WQEa|ES)w9Q|$4&=H)3-n)1n*ng#?aDAO2VN9OH0Cat%cy(N-I)Aq}L(CeY)LQ zm&(O5<^dOBTfvk}xB~RUH&EEeciV(4!X8qvB**WQ@MTtdo1u9!}cL`!absPcRP#v-+{TZo4siB9#iOf8_`iiZqqNRf* zT+x1E#o}H`S-;H|N{4g3Q*3g$A3JS{A+@E3d$Uu_VXz-sUt@J%^qX(E*h0RJxwWf2 z<)w41A)-DiQlr6~pIBpPV0d5(nLR%HZ3NpIEZJcN6va}AF&kWoRUz|S**EMu;u_HmU7j@%mGENA}1T#n_~f@LI&fRL2PI*xAMi z9oTDOTab|oBzAld1ISx2vX?l0Em)Gm@-xNx5S-_=kLkK(jLGm)GmmniJEh-Y=E*re z%zY5`;FVgGERja4L6rb(P3dF$0!SX}7&zTAjxRF%akV26Ry&INCIyyziUN9}8)Ss( z0E{iiE_qic985&1de&RE-H^Y> zhQyu10BlTk=Bg<5Q0eJo%A;@#gZ6`QoQTd=i`ZL7(_epe)bC5ck1N&fOYm5|)?fWZ zWes{K(%_1^+CJ>?2)!STr(FnSFcJFh?YM+&rqIezJ=vP<&9lT1nx9hvW0$*WlsFNk@Bx6RbLiMZo{xth>uI= zdEoMGo#amiqxhq!VN`MwB+Dy(017)RW!AUMBQ%#@fQQE2q_L@VTzlzt&!LBjnC$FgY0NVY={5AW{eSX~l zF~C&SqW5xI4Xyz<%yDAI{eHYEJ9)s*;|2f79KioDWNSBcSor-j@N*M&39ZoX1mJV9 ztjf1pe*XEfU##+Z_q00j`7?hu_-@Z6`{iYz`12}$;JLWw-REndvgaN)BL>a7_><)b zXZp*_s>#6jegNq}z{}AqDCkn~xw1%kUEu%tdUTfA+m|&E1b8^xZvU9}e?|Dz&EbW~ z`u>h@HpZyUgcQh=w*7j+A(MmyBRwY5Kg+wS!~P10w3nOD#vA9C zi|@@hBOj#;VGKN-YYf`Ps_p4d!}BX7?nQNsBnQ*seZB{wu-mi(PEa# zsfJ>eAsH*WKCa1CEE~843bl-_axx2}B#$w*w+0IM@kt-dLNx_oHss6)WHur0<_8Y;_wlHIeB@-q9q$9FH*f8e$OGbNho#Yjb}OB=b#o8>$W>R*NoqC zg&SgJJt;}`R9mQUM&!HFg~GVnQHXrDbyW4$Q@1B+acfxsrG@wX7-MF~@uiZV#Nk zybc?Z)Dt`FB^YS*qPl6Qmw;JK-?=5SGytJC{)%OMxyLqy-0cxkgCv#cgt`>n8m}=n z*mWDzug2vD7@r3|Pk>^UJWDOS{A`pOI$03`;Y z<;KH=%_D%sN1B_zi)bROR(Rcz$O(_VxULSMGPGY5F)9q7?2nQ3kl?kxo9=4Mc^)r< zIKtnuxtqR~?DJ<_qgY~(Xz}t|o(A1Nc7*?HycPb3b(1J13NL|uu4ulMn0=Vo zr&a89<1OEWF(GjeZ&J#cnjPN+zDj$SDO}l2QcAbHx;l?v?B=?D31g=un6fJUK8CZd zJ^$=)c32XRHUa`k0g~IIG6xwnh9b9kfc3d-lc3x65B5ELlEQn?{YT+wjJr11^1eW{ zyAWqCNR$vp^a(GOvk)_?&wO}@&AOc96EF3yDC^EH8J$0Qg@Bhy=t|4yZxuYto0j|+ z_jL1}#+TbE7MmwLfct~x2SX74{UiGxPUfQcPlyv#ki9|2u5|mqiD&TrXZ8jh|Hs~d zhnxFga0cjt%hL}gnY%IK!lxe0~}XLb#6B}i0JuWS!u=8tV40I=DB~m&(;F< z7dx-p8!40(s*E1iwM;V4H;%;k1+MWvRg$Ek-N-F7*CHSB)4FoxDlg2rBlpysU6$2; z(_sINTvC8fa?qj|KwqXCKP-7H$!+*6=uu+ka-&^P?Eqofm49}F7=S3lz5 zN-ooGOevM`tjt1{?=oz!t`-t^h?WZt2n|$amjn`loC(O^5ZW&CjYbB@8TA+8s5f*< zu%#_f+iL5~R9Iet3>;EMsQx~vG+GgFWyuUUG3Gc7TZDPLd_FP!b$Esq6_64Uy4VmX z2}(R*wq=Mz!7SE|Xib={bWlThid=|djO%0}+Ufc~^v#!D-H=#bh%^&eA}viYflgrE zSbCQ-Ui5ZU{0LI)7VFe;2^Bt!RA`J z36x+&oxtX58}Lx7n75d}iqI24?&uJkPA&xJ^_J=MCJac=o3dwUw1GE$nP)Q9RZOKZ z4{}7ePdK)>7sEspo1|5w##tN33BkF?@O0eQqUXV}%>)TCRJ1kk0d)!?GpIEQ4GN?> znwRBUYHU#F$;8meC&92#=DDJC3Yv}xf3gqZ@OEhf|AOtwqacJnE8-A>wNb!;x7kyP zA*bqNL9Dc{MmXXl1TjWrp(85RQI2t7cJXBKSkLAO_6Ri>6? zWt8dB!AaIc!N6#_*j7_76B5|VBhNFz0qrT`+_>PD((Jhr`owFj3-NW;46JO;U9~cP zK{)HwfGo=66QT9hu0xzre4WeM>|O4}J;*jA%r~JWc&0m$OLTegNkZ#~js8&kAoh?^ zhSN6ksHu}N?m{6A~U{r9kg-RvhR|P?^6BQ&|%-iY3gQ= z84=197axI0o+DU&Sv_bTb{jT3ej%66eFp_i6H!sKs^AA^=BVV<(opERs}a=Rhj2DZ z!)rKCjAysz9nhca%Y!9~`e?o%IlMr@cO$y>g846V3tKLCMRmm&@3Z)#JyWfp`D- zNg5pRu!)-!2^2LEUc90#3GMFpdtB}Cu73V|w!S>=y-W11X!m>I=j~PNYILLMi_}B? z_rV-xT+Uaqr=wNbjAp4)l)NJ`EBrR>d6WtFlFGz&KiYKt%@%p`%POg4rPE^GHIm2qM=#*N8Tzi*acR$5ej>B!pAr*i_xI>-uw~XnWR~;C$HVUiUW11{J>rk2 z#_QtGr(&0n=c-N+az7ksJRA--{`)(A;H8*O><=!4E>KdJy&PQyWI0;?rApEF`Jdc2 z!L4o;lka~1K2KMa#{&F-tnS24izGxO0jHz9Z@zwFG=JbpCX z=)^dnecVFZ=+<^Yw)<90rXTGzYWvZu=c#&r>letZ6Q)Vhfgu=^_|>!pG$G%F^AZr#}?^e@%@HvwPjM`da;Di z#^qB+IzPuzSHfDIf6@Nl2agp7`tbMFN1@S?cc%#|+u2(ooyid`gzOu_uL&kBRt1U~ zZs3x4{gD&CQKjF(H;U_uo9i+DMb9=G4bPH)wF2%qW%5Pyb*ys4t$lp4cf(n3=j9X@ zMJyD}#v>-ko1ayxX^FqonhmS{?xkz!L?lwYuSGoEo3v*nOLX>*1B&lw_po{`&)(w( z;?}zle*^uUK)FqUh&Aq+-zGTBt85GFJldHk%bd;w4GK5tt%4zW;Wrj*R``K@c_67@ zq?&AhU)M3=an+k%^G5}Un%*b!w84{8f;uyLgXH;=CFV|Q0>}%eHrfwMi>{of)onhrF$OcDPs1yark5Mi? zb@RuteG8(BLZtNzj+t_r*osBBG@nQ=Ab0PYOCceL<;G?$T1=-MD`07B9JJPNE*ng; zi%4fdIxepo;rfzTEO32j9B$DEL~b!3-eP+!*ZewLMsWFy z)iFWkzt7RhJkq06^isIEBmG2xacpmmFj=xJ-v}{28~RmiZX0rx8SFUxmgD3dQdZvG zNo-=WE!FXdp^Vd(eTxQ|1R{OTLd#wABr`y3fojSq2`)L&%kW|BMCv1{NEh;JB#FkN_oS~6Z@Gm;|CmM=!pX76-RP<<}iT4kzKmj95lM9kwEB==s zYL?&DQ7hqwC`Vs&O9`UoqJ$NVBd}3{ z7Q!{4N{SG>oqR0DI3W@=e!b;9h%zhNyJ68WseOCbF4 zYY%};@WLjBQYA?ZQN5_;!;F8`8Utr%u%tx*`C6yQ88NPl%e2?R8O$u#A4E1tX~Lm= z7swM*uw7a_2p8*so+mG3PFXWU4iken)^(6WDStv}1$7UT+o56jgc3wT4OxdOl3~>Y zXKgh|(oW>2_8Sq}ko62nO@{%Y>gR9Oiq$zT%3T&bP<3G*&oBQ;eBMs*!E# zd+kLuWD=1r#!HCn?UU)D^HuAj#SzRPL{g;o;73q|+rvqu=3*g8i+j?g{BT5E8}_W0 zwz?n2vBWLKi##ZhsvSBpLMp*RhoV^~15XAO+M(rWg&!zXl$0hNP?SgM@8LV(=+HTi zmtjUS;~QXgI66`}4zJZ3>=04B+{<4sljTWjLZ)j$#!|ODARHS1`6_+|ZIoI2SiPJj z#}q4%+a#x|8kfhI;VHgt%oA--Or;p6PrRO17sX@X*387HKO1YMC;ydP@Ua>NkUI2q z7H|vU)Eil(7EdlOgrC^J6HE60G4_^0aerI(H^G9tySuvwcXxMbJdL|saCi6M1b26L zhXi*C?oa>j)YLQc;{NAWbwdNisnhW7Q@i(C>$B~Ui7$OU?Gy$&g0CJQZ0G9y);2y> z+~$7&*`6!&mU1+#en6^ac2um*%dRyP@+$6!T2@{6-%eQHAu$(}S+3$&5i233Z4CpM zWSk$_Pas{A{0XhQ8`$X2b992w!iZ^0xiZ_t8J#VjM=9dS&>3DW9>*bnn1Ur7vZf!E zQKPYDwB_%~VJuO^#HIEV#VYU!}d=OR&F0!}`Xf|+yuovv}kxw5?dlD}kO z!+kzKo_#H)y(&LBK1!>U<1nzWs?_xVe0cq1)B`f*ZyhYuDt_|(-uo8Ug`SBRpC)bqCe0E5T`My;tPG6$faB9w! zBC1IJEc&Hx7-nfM_{IHCQ-zuI3)e$3<8 z=a!}8wpHqS35q*P4(5 zSR`?+Xb&3KXa;aBX5`N^aJ?+Uwl@ZLb*M>W4rrLrp*?$R-A1)H+M4wGc1BunAU7ky zN9HMibL_pm)y2L(M1z8gJP|Q23`XEeNzHr+W?REVRV&~6IYJ1BV*euH;$e*>zu3+S zhdCvUi#bTN#sSSp^xS{=MYGDY9}Y*DMf-wDUeYM&sboh7`fW!5z4eOI19sABwh%TUO14QnePdxbF`Ye2L3jyy^Ip;Tf|CpA*o9v(z}2&uO+tT501!bI9<{ zTm~1S86~W%7F2RAlY=$*b>>!!&A%zEkN+5^qI^7@>hg5HLf+i)?I&bQPMeA~ArTYH zQWID{Prv-<8s-x9sA~J3X=!&6?HOI4hpLu01Y25N?)a#0cRvOZQ_~$Hf;|uo@D@M5SL6-Om**+CzdIE#{Dpe}rb!&Tpo;-i{Cnu*T9G+3y+YalJ6AQPaCX;28y`_nm*BoZ$vS_Q*Zf`x?52ofM( zNH)8kp9Rx+D2*OC-1f8nYbJ#%YwNLV$T_*V38osnk}_)tPVi662z7PwH&qUJ7~_gU zvX1lyEftc;Zj{a_iSV&60E|1R^k_~RaWLI#IMjgQQ$BLRgf#{*g+$Si)5J&1FVBA| zf6_38E}9O{iDCHS1G46(K+BY@P9Fsuf-wb|>eNJN;PpLH+zfs$PLFpZ~E;IlR= zjgTD6qPvhBRES34nd0}{UldjiN10x$P)4mEOqt^+=Ac73%tNFk+<2jag;~LCeq2)= zm7|nbX6rDLl(lJ_I*b01B=mvCs~3dQ-7*Bzm9qvt$J8kV4p>VBKq2Q8l;U%hQWM56 z!O$FlnQgt2?$Tyq0vBic=!F$- zb5ZKmFDwi;25aK^^-H*h;{Fcm9d=8fX_>+uL!UvN)4@)PhTbB4)TPdZ|x3zr~1 zD#t4DEYun>zr5sI(le=BGLBnC1Jud9u>qW?9lsNGr(97aErJ79Qc{F7SB#OGz?i<^ z1EhN?0k$!?FIex^%<2(UDEZJFaa|-xDO)6vB~fS=m=My+auU6iG@0d~shHNN7({F! zbu}iL6H-42;Ds4D+?NX;10pA7;^4JH{05B{f}oFtCV}N6`I07$AOlitzlMCvDF$G{ zkkR9{iaT+^BdGj}+%3kq$JQq+K7h?aN#TSHL@m-1Q4F;gj_9iU754iZD&w{0&=(gA zDx0JxMMwn#9~evV%&IZWYnf}6EJb0OboNfcI0Y(BWZAw>)AHXKqtNiGuq?H$KmTB{ z@*}R4LPrxgZPnp1*=lh+20I4ZISpW{?DXQLw+`k)a6_`;wx)Mrz!PGM&PQT!So9`a zIAz^6la2D7)sOWe0tTrDz|B=Y6DIQ6HIwjb<{|dO=&>s2zn7e@CKLs<$=L^4li2dZ zl~WBGvqG-q$GZ+E%$IIdlPEg?q$^>fVSX*Q8e@h5K)Jnv#(lDsvD1$%tG-~XN-c5LLe=k+NcP6g|3bKl%;ob?F( z274?B5aIeUa?OK4n|pGcq{QrhzqB`D6sDgwG31_h7Ba!_{rUcfoA_tJ_tJvO9v|mh zzMnrmnw7XepI^V_et^u$evhv!Mm`^Jd1-g&Ml*h|2YK&Gi++3y-Bca>nDm);)8sh^ zlP-QY_bZML4qHXo%!WJvl^zSUCFVb>G2AljaY^I8*kP_U>h7BR?AGjawt&IP7; z6cVUerHvy=9yN&$ep_>p(LQg*y~0eSj5kGDRAPRem`u9Vb>ofZkUS|9iVh^-$Oo7X$u$n_SgO zctfgs$?P?MwRp9y$QRhP0*3Bv_^Pm1P-O=D0wN&1)0)PBd_09b<;Yy=%+Aa{teSN^GT9~d@RM7@iPX)`fD z)rUew*H~JEc@(A*`(N6pCsI8VNc)sIB2I*yAmrj#FW zDgPyrIU(E_le}Ui9*$Ci-W@4gt<8|ea+(r31DPfaF~Ti6?>;8c#lurP_#bclM7W=t zQOoh;;Md*y>v(p5OZ`5Iq@M_1&4lY#qRXJ}S=dk+OTA{}Ym9cHDI$=4R`yogpE@!m z9?EOs#T3Z1KDjBP&T~{8TT>Kl<;M*AhTe-t)E|i}_oOX^@$v0k$wbg?{6ifkCl)>j zGXj(>gAg%ur~rC}M?PlF+wXlQ6IQqhw2I6F81NRTVyqi3S7`Q+N~PCp6|4`ls6*WJ z=h{LJSChv1?D#`ZT!fvCzNxR6Y>+BBdSsG2BwDPlPOE!;&Tr1=hqrdNOSgQXNuEAXYa z?coOcX#btI9_<3jWNpB-b0slFk;#dOP1FSfvY7ov(wkq{yLC9Hwxl;8(Y-g3wJlvs zJt}J7)Ihlj-yo_ehWyakl@m$UoFI9Whb952Og5J{$MhPE25VyJOKLzrjaW$_CV(-z z-=Uc+R`t(y2Qfto>a=u#ZDN*L%C6-N$_G8TMfxED;~)QPe|yQIs(eMFd$H#f!$05@ zN^GYRwmvxa{XpVuaSf*w)9XUK4CvCUS0ttSmdJj%`|deZjD5a-f3=+l3_4zix;b{z zRhgH6vJv^l&Y>m@Sy(E`yFB>M>d`<)kkz3y#^88E?fFm7YC+ym| zMSOjYNIVUhK;D$n=UR008TjDa#bwHIAp~h;{41zORe+k2z}Wr1DbFgR%UA&{cAqP( z@7?b39{!9fPJGk^E~P1-T?{(kBD6rdSt7^!wS(UCeheFJM`)fMweSenxOw*LD9=R# z8=W};n)Dj8$*;+&HH&Xa7~fc}t}YoJYI5akDQkl+K@U}U36oPr{`n>>4`FiJzaF&- z;U>Sa0bJj)a+BL+ya=+T375u$haU8B5S2b6+_40wkR;-FHI!^_ge88LTbe z*O}2A{Bnsn_`*D%$V^r;>7{oq28D_i^f@n;#;H(?&fMRcG4hb`(nP$=Ru*_Jq(J^- zVQqtse^>kdXHx_ICq#n%|A0tTfglo=+^8x4KqNSsKGjo-Xy#eO1C$fzCTYN-Fc344 z7@*OnT#EN;SL>`Y{)-|JTPc*qU)<3%^RarTz5{$to+yj;z1T>}+(!``>Y-GoXs{ts zv;<14PbJ1*>$Py~FHYK!a^EiD$c|YSgsV@ABA?DU{Wg8KhTX-{4dw}RQXWx;jX@CO zbQyHu6i-2fRL02i+@n@uO-}_c0emnHRM}8LCyf=_;V57^_6Evwg;239;REtd_W;6s z>)|NmvlLkDfmHfakeP{@upAO_?XZohNg15Q(rfY*%#q(D9%#I+;LrnI8bXsRT#`(s zGZ1jTsigue;eKNHXNpw}<)y~+Jgemc8%E<>DX6*gX}x=dZP#`sxSWt7Eh9;jMxy+j zBC#B0S$xxJ!?S(U(k14@T=WJM?1RE6ibDVqGUt-Iwm`p<#3m>u zx%=Im6WO$>IfqMpx!KLs`?#rWnRHT&acPSj z`|1l(n~tp4p=?w3ecsZo@|+T8@bPtal?ZVvMewl&#S{rnmn|zyn6vZ81FyXh<78lw z5ea6wX!)B@rscX&R2ba{vj4l~j`9N-Xrv?^6iT^2xbfiPQ{V;c`o? zGE~Trp)>GBjFe^nn$7u^P{pybOxUg>-HI4z&4OCY)sR9#rc@=bv1cJx<&}UG_ITRoWS^ zfMT(f7WGAiEuy9_Gct=7!1XhrzmJ0sy;MG`T@O*WG7CjU@sdhpNL67LO~VNtU{gf} z_`#LM&@axVrj!m_Dk0fxXZ{=-5f(O>u4AI>#~;N?1pieh%&!$+yv>C$e9f54SxmWF z*9}H@el;>WpHiXl8&qcE5Ex_NsGij^;k-RyHgVbKdKQg>-g{*I;?Va_qZe1UjTvI> z7Fr>|K4tkH!Sk*!NVRThEZ%a-1=M(dVX5V#-8-4HP~HksWVf%y^0xU6(> zW~dMrW!I~DR_3N}#k3SlKet;;s8!K&(rQB~-LzNXkrlh)6Fmx+0W%;;VV<&R|64a? z>k{4}GHl3qNWtzsfG^!P&yNPlPVWFFqi;~lpUF2=sATw6Sc4WZE#C->{;PrW<0&Xf2ycZjT?PG_O(kn9#te@xI9kTBj>+N$9_6$+i)8$!~ z)Qsbf&+X7fc&+2d9f*WmOq6Y3dDk=D(>kJadQJE3&g%uNFk9?x%{M}z(*v>Io_zdz zo>IJom)Ba?lRuKF9c3e_cIM5Z9*|}RxQe9@!2_Sduj&5WBB+kdKEtb3w=CVLTh9(p zEz_u_!Cne(_$%60j>N2krx|sGa;0F7Z)lImdO_AKGAC&pVS$e-=Y*HxR)m1&?5F;ZYrt(Pb?{ImkyH zUPig0V!ZHU$`Zex0mfj*_ECY$%|vh8cW;$D+I3*V=!APD`u!+CzX)5w%Q`Vi?(GJ< zWvA2UefMxG_Z#nJ^dWk0ufIA8|cC_gOpL&-+Ep-TuRQ z@9zyp{x2g>QdM&)0`8l%5#atOyiC zAJ^Bvt{!d+pN|V^wLNY1pTX&VvBYyy%EK^s72=CI4h*Q)HHvL-B&akGX+8eFw*im- z7VAj6!!ORaf0rN>8wTeYsyMKx1+b^HV{^(euXYO@Di6$F#c2iEn@ zzaMa}HX~-eOq|j@HBxP6Jea(8T$k^3HuH{p5;ynk#@UR)^M|XOtWA1!O*IESp}8iwaw)#l=J=*Iol0A~s%L`TuB=-XC)b$hCI|9Z1w(^9(-eF0 z&X;IJ4FfYX`;Gjf@w3cSR)r6x}VH(q<+gYOp z2H7hpp7<)^S_Wd-6ZA@`Nv(tu@Tq_=@+NwN)w!Q z_EO|;Qfar@jzr2fZQBd=_i5Y`wH~m|Fq1j!(Rsr?jL2@aMa>mXitWjfBF8i5Y3<2P zH@F_`+nZHwwxJ0Rif!pj6mOPkxB2c16xtl`;lfT;&Knt6IO1GoR|XaDLC@|7fm}q* z54os~2(jtLYSL*z(=1yc{e}wQ*yuL;#SUI{rRPzmV4rXW?HoQIQR@@S+_}+Wzq9(L z;$-W{q0{A9Z`f)6^7m>mwGoFSfM&jNzVUD4cuL?jyU`yar<_3mJn0T_U+-i*Hdo+d z^+iVO>)mgl#WA_CyDgcivzWlJ}WR0PV8vd@p~O2i~x$_>WZN z!U&`a`7-!i=dUW_4ZjW%;itSY$uczg-L_Mg#R~^g;{XSgW&SGV13(#;ALCpAc!F>< zLx=+d<<21>UaTvkdW*>GO3DDx8d;duA^0JVJKRhUBIh)ZT5n=8cCQUm!ay*wkmFUp z0erqHfFtVGqg?UFvJEMrb;i8xwz)?&knM(d@YM}TK$f{0mFGT3a5F|IZjry=Rnq`A*E z&ii{#gPk!v`_T({yPM>H^`mr}i^{*mtd}bpqVT;&*MAaDgk7Dm4}YXF;BS9uVP=t+ z@}T!fG8KG|v@O29B~sLMm(A#X&rBntNJ6@O2{wOc+4}}Em<6Uj`Te_s^*;gGgOoY; z|3*Tva)_#@J`@1JRGP^76~oVBM0q_ zl8gxT%v2xDptvdqvr8HHBOqvYkOu1q?W&r{wmHTOZF<#*D#x^!Z+5h^qOVn$%`^s5 zJS1P34zxK7QWuK_M{G6{Nf;_*>T|%81=-P>S>Pm=^j8)=iu+!>F)U=`48~`Q__bdX z;2Dfk7!hHgE)1;le9QRXi_PR-s$ydhf@2k+XHQn`0`z};$>#i>6YUynl3f3W5EOz0 z`k;D^K$?g?YByH#)l%-4LnjCHFZh2}B8*4W#el0rNJ0R!sw?gm{w+aO@H<7UQS{3o zOT<@AutWxUr7#n9~>pRQ`J!xb~}JkX?a-NNVc?iOg6n}G#wc&G}@?jwu%hyKHbnj6ZHlFIG|!J-J%plURVQm zLLgrqeqsvpFB+~Cp@7`$pMjyi=ZlSlgOk&(iz6wexE{azrzd)*5oWBJne3Qv46)|z zy%z@_z`LZz7;q&lYRA+bCdHi|9Y#fm+MV1Tp)URRzsGY1;h%4>QxNybmR?>?9{I6< z&*MRw*T={hC?Mwh_}Ax!(Af%irJnP5Ah4^w&C~dtKWY;#hPSKTz%X-9!}G<-^VyAZrpmSUY2Xwg zf0|@U7BaRqL7bxe$M2Zmd*ay)ifP{rYaX=Cn&ueo?eFZGI#$w~-np})=ZgrG;ugK1qe0nb5^R|JH zzm9|fFGqC+!K(MNvpK>aS%uctj_A$uaB_$(L&jIjB(TGAC-m$oFVu=A28x@;4UCu} zR_=Dxk-H04ZThE_Y3v9JmR-3t3JP@Fx~=DYqxsQwys?dm&2TK`m&PAin=deR(Z%=) zB)9~+b3>QuzcFGN8Y*JVM*QT?=81qP^`d0u(JSX25i&5b-CoV)Zg$OIzJ#?*hIioN zAI!a#*n+CBT{G#718R}gJCLrfoUkCXYyL1bDkJBf935%)awzJ~N&KGPn2LT6N_1y( zHytWee|uWK?8+-pUbk}-CxjbnS5h%*C~_g*n-*VY40*|nY8i-b%2ByAv$GQ4c`#KP zP)UyR7i$vol`5ittTTp@lAl1VE?_aPaIXw*D9Lo*DWlJ8-su?n`RL$uFX766qsP(w zcvz{ATARk#xQ?IzQvgdkJ1Kk?!;I|>yT)y@9~vF^Qf1}yd0 zu~s5CbSc^RK{}XW+jj9Qt<>P*Wj!D`FDZ;=S7IK8J5I9x$Rhu3Qx%@^fiqQlpm;4r zm#%&EoDy4#)PJwP)#UdqWuNV(XFeD$1_vRtS;9*@( zhAHYnbugv8j>j3U5fL>Vj;gmhz7(L@!I(YTPXE2OXmYphZ!nl+_d z2BqVmAsq*F;J#G;0SoPgVMV+6l3piCO2*#{KxXA_T=~*Bv8cZ@h=4}%s!MRQ47T{Y z>K!~H5ju%Rm|-3Fi-I;O41jl4D?i29C{WYR4ze*56LHUShL4LS4q{{Flm{B*eXc*& zddgk1wE_%hH?dQpB)eYYFqGNYjMZz0XcJf+KuG>>wR;DzHV17>7A_$`vpW0`+|f^Z z+{ZSc2P*0iivUyaO2TYzSLyH`Qcb5JICH=xGxABHP_WU6H5b;8vN9niI73|_Ahohd zB5i2WdQGLPNuq&nnTwpZsEH9Js!8JT>wI&aZaf+tG_`q%2u?^vvxGn`m z+fQR8q~-^lYFSXC^Q@#9;F&ZC;KTyf4=ko%bgZz4BUo$!sP@fGxZ+X}Nx?0Ay)<-v zQCb7#eYw7z0 z+98Sf!WJw&P_0nuX{%-hW^re3mI^NW{8>B{++!>nHAZTzr(S-ZUFX=WY6?~xV3dqn z{9c_7v}s)$PQ-I)(iVZY{Ph3hwV{;_K< zM`QDMs3Gb|%fGd)+v8*J5tOQP*y;54e0`p}2azs|Z6TZ%WH!*GQ@T65z3wAakK>^m zsuSAP!$jQqwD_5GKkBEf2#@}vqO8$oWqg*s9gvT^YUt>iTtyy;4V57Wr`91vdWvxk z?H&nBK`MJG*vQo=z#R-+Z*!g;)f&A&NnZ(=(u(2TRQpK-!_5Q)h)xn8#yR#{Hk&-A zt)DS=t&mAmYbc!~Tyg8&s(HDV>mp%J59?@`dAT%op<@VHr%7Ym)o$ZYM?+YOU7*Fz zy0J8JjRB>g3|^RqBB{{vs9{%g=~vW^Qb$Zy*J{3S9I5XB=}tQ+tP<^Lhvznlk95X1 zMy+}-17)Zr;oE-rie?2v0(%)k)+y3dR?a8V7@iQ;P)Hr6wB`(uXlCxhVh{;(8k?>l zAt{o8R=0;+djk?AfZ|sYV%cKy6A`Pwp8m00dtx>|xWKW6gPg|%L;SHXC=2nYxCk*I z6DDIK5?kYN4X4(*sX*vcK6wkR`Rxc$+)(oTfMK4XF#2~iCV*i=(>N>o0ys0nqjJpR zt+~a`d<(4$h-i;(`4dRX{PDcYz4JEqDgNajX{(>GUzQusfhg)L zk`?sb*;Ti`x)%`wQyR{-`Cr9kEwRUsHd&n)4kgNR>&uc*pd8r zDE(9?Hb2E-64lI7*81hHB*(Xh8Iu4xr@L|Q}1d@ zgF6WFc!F%W#qbMCrmeKs(dowO5#-3T%*~Uc#nTe}e;E;!5gv>OA|weOskTWy7toO0 z8C3g~KS=+ktPz!531$L$inU1B?(xVtzS92VGJcQe_^P8xTCaQ&?+M2ihuew}8;fqd zo#*DdzQcKZQ;bjj#-aFRoqgQ`KgD$6{-S!sMsju13c_5SG}VKRJKIhAz}@tfcq+9C zNDaR;4pW#KZS3*VBF zXB?u<<=-5zI+odbLHX5NPN= zZZOWFcYC!>d_^U8qPV9mR@C6zHcA5JydsxDuc0*5db^Ef`||+;8s^}CJpJOh1m{Cp zBZN?K{BYYl@{?@I?=`FSO6UkBi%sSZ+V>c{!Li9ToErKb{@83kT2t7O{E!kPzYoK? z`0KG+gDl4iMOV%880`>3dpPf#QAHSc^ zB{37VuoFl*#Cqe!2E(v|GOs*07J_$jIXH7l={_@oj&N3PcT2V3UPbvMt@Q4WJsk_# zUssf=4NrzdbEH@%GWt5N8Xw2%7q%Dazb89ylF)aR;{zro1wQ9vt&LJ!UUSr_RpiN= zhN0l&Y%xn&RsK3?{95z$QKeX?pE-A0SDP~w0o0hP>Oxm5dLfeJLQGZWqh;T5l(oq! zxZ>Wu>kTq4hl}ts1b6#Kwa%UL9MgPS*J(&ztP;zAuWGPToh(u!!tEu8n3tY@|H-DmwjR>}A|NjNAL~Gq1ERvei4PHS~#xhB5d-Udfr0v81oB?**9F zyT=qrnbSAhxbbP{=@wt`&bVuNbYqgD7E!iM=9IZ%esv{Dh5AZna%mG{A>X)H82;#v zous+x88yo8PUXHsrucK)H)__8g8}}!C#ukSN6LTmjvJX zj;q*%eLeBiHq$f^Kv>NYm3Ky?9dy{`6h3R0y#7<%23WtP{JY}zKLojR{dY?PM7jJw zG`Rl_a;Hr*P{FVcfI$gr^wLEI2&=F!1P=9zvkU%DTtwiE#>nLYyYH*vYuHq=)8)^X z@q2$e_gM8&&$OGJa~_&LrjSB)V1ar`MbwxdW}2#<`aP43Djg4*CR~rlLG@Fp#&^mQ z6;FB+uoW6NN~@B{%D!9;trnvp8CB2SoQUzH-$65Ul4KYNbofuC>fW+UgEmSH@MBoy z+6a^qLD}(LG&%;xjxgZAI3mskQ?qnr@--A?!4)ugUiS;*RAj()WX8@-rKti9qJPrq z2uISaMWJD}>Au*?u$CvX2CCoo(R>H~a%Y!Tqy8l){@?(l{p#HkWDYV` z5!`PlO&45Yl;{oFKng>1Ie5MLT74DGX56E$%4$+n8O@sgrSTH z$HEj^TflnKIItXr4NJ|U3M-v+08EvQVJ#L06`p4Gi8SXU#M+rGs?tOiHU%73p=D<8 zF8L@Znk==n73g|!JuX+ETyRg6P7c+#Kmnm>p-H8E;IDV}Dk>nW;)^6?e#EM&!+xir zc4iKTY;o=Z5=Hg&+X5|pa*McW6X3>fgN=Cs7?gg)tB_B)4 zccm_hOa??bT2OeRYYJ!Tp~#1hhQOXihf;THtrp@vFfg=}EGDWl>?_O3HVukEV#3lP z^cjV?V*V}{I;B&VJ5Bx2#)3<)2zIGeSuz17+Ab{x%4M8$QD>JXzkX}A3H_0f+GL?b z-XOMiBMTlg6q2HeD+BuPJK70X>Kyb(Xe@p~sIJ6-3L_t~HDs~*q3yvo9sy}U)p<$b z^@Dw%Z+(y9~!P(AwBp>Q%FF(VU&>6dcBs}oDU z%nr_8XGRqCHTHQ22lECYH&d)aG)jIgTZS%Vgrf^swzCp|6|!#UrY>6aOo4z8UN-EN z25&@Bh{sCHkLp_Z&Wo!#U@_-j{s&8skaM%*d2;c)#0G)d0H!AIHOhKoGv6?uh*r`9 zo(+qU*Z@jZ2&)a`vFS`8eqtBIQNVI@cq6#N;lbvM;qu-7CZ5r<$I<5ZEX^2)*3fg$ zfu^8|gp41)k$ahz~~0x>LNCWB?Gt3KP#pPl@! zvbo-+0BaZP#%CnWekbl{#1?@6{`~h!E@>u2EqO)j*21QA6%SFHrn3bl(3r3OVa%%< zKY!p_CXe#tz=j+@3Mc%hp`HT&hKirapenQ5b z0=-rcb7bWqv7^or^V@4-Rf;7d2O?vN>>>RlnFfT=f!>!Ha=szYN8zcM{Au!xmBVHc zUlB97m>Nb-K*lNQe=5em-xYDy4VJ-|&@~!d4E~<9{|@Ck@apNs@5I{F)W>eM4>Hnc zJ#`DuhG)X<(@=3xwD5fZrN*Yt&Ndvc{Eq#KuRVj)q{uFwxw-v4MIla+(h>^T`b8vp zqy^O$CT42=ZkCj4{K9CbT`q4(twoP=dOzPDSMt(}y-JI%(pI)9#@6_@Ku$J)|Bu?9 z?&piEZNHn!w9nRE>`$MYEauOB|9r5%JXqroBohhwTlZHdj<{yz5yc$*P$QrB`;HC% z$MdDimX@n+-`%$s92-z<>}6_e%GTX=!;cdrHel(n_oi{z?(EQkAJ*1h$9XapvmZE| z&PC#|+bI=4)V~(+s_;8}T)#ZPUT#It3T=C{cXWB)L!u)iFMknw!{5yZFlU$YIcyNF zvL5}2jrv)u;GN@YlL^>Bo~Yv!c3b9y!tdv+nl8hyZ2RM~+K7Pf`gTzVMB=I)ICa@F zp|)HIXZ=9A82MLnv6*}{DQ~8(4!K-eaiWgr7j3LvB>CLlXpi<|zdI>4wYm1@h>9&i6+6Oxc-jZCb@X)y7S=Z1ULTSPkMjI(u;7@iD&!VU)I6k z20x`X4(#Zk4CD`|xre5#V{BxR-nAFjOn9^m!4C{&ZMu@ygTEuZ=zc==|KDF+4zJ*8(=X)I7OQjpEoaf_QR^K|S zw7%rey+V*%^vl0Es@uQVa8-d$zqkx5mNkx za%7Hi-v=x45hd8Ox|eWveA|r54NArV$@h+IB=2?e>u(^NnLL(k z^1mx_{}Yh=|IX8a0GI#oJe~G`t9H&IYUjA#!!;GM1?mAP9I}OQ7|NLcQtkedHuVI- zyT`thXFrJ$1m1Yqca^M}Uv$~!o_if;;C^F&c$GAV{Y`SZ19OhZ;*p04>+#-}4=HU& z13~r5$(wIiIwlrjnFVT@hQW|!Nx=1Luh2?VoZ*C=@_iX|H3-5uYe!hy;JeRTTed*n zmLQ)l|MIJP5|XH%2@%e=kvFL9)X>0Nbq30Yi&PyM*2e|FLT`?UHN<;uml37boM;?4 zPNj}bqgQCGyrvopox&Jy9{(k$l1QAiNQ5zW??uwmudSxdR{WG!{C z@|usb_L>i5bczCFJR|ANxTXMBxt%KdUyIsVfn#W6G_wUK6RO*Q@ze%xX<;VaP8*T! zB`6hAd?+>)Qv(uVb@cvX7L7;*j8Pit64YOwB*+*F1fnp5+X4W=ANFPv>=dx6oesE^ zT0I)ggNIrMsx@|aoCo8QxIvY6eY6~iGRl-*H7KOUB`}b>qi_%*zZu!yMGuS0y=um`Ke+WfO+TqFzqqebMe0vR)`o%W5&|pMKsmZvR~7KBZoI z!Lt9#(NK61AKltm>}Rk1Z4FnC7D10)dTbT}qe9}BC5mRG`hZEvC}*~4ay70vL0#oK zYHf_;6iEWqI_wP>w+alJK&HfKae)9_B&~Xp3 zJ*)hFuU<{=F3zsrZnx*A_Y+CfmR0tZ@3OXP_@bZef~&@BtH(&qO3X7m4lI>w@+;Lx z<9wIJsy54I-wdlR>!+jin@|}0mQJ26i}vwKVu!;-r8ZS``IH!&e(Ue?g0wT{m|Mc( zEH@GA?e!|?m+rMb!DJ4(pJMqcyEqovC5u9UWRqxBOWJ!M+hhUB3@cjneaVb4ng*lF zx@=e5eKWC9;_;97fJ?{rP1n4ROXn3|#heXBk6-v_0iDTaQ&tldo-0+ui|Kn}(Ruc! zc8qBwgXtETs98(tSkAeYi&?6GFfkhjty-OV*Rl?9Xe0bU^y4ZgP(JfY)N6d9}^ZG`3X2*(NO?W9iOmR69%eBd*y}m^M z+&;diVn#2$pEG9Dv*Ua;YyZ1RzZK5?;M?mLV!T>l@MgMNja+1Zh25reqpkZ)I;;Tl zL01h^5x!UtQ>hSSxkxWWd)XIBMw%4^GaH-G!&rxfI_r@gPj3TXTB+AW3R(%=Mj_xz z+!X(;){#G=>KHTkk+#epAJr&or?1fy;uFjn;7+t~U=iwGS zS{{qS7{CO&Bi#L7`;*3;N8}gFnig+{E_n?>%KY|zd&M0$nXofA_tD3iK@OVJwzSjp z3A|fzOxyAGzkfSxa1ZzSdoLQUFYxT z*VNwa2YDF-e@P2QV6>fW*!!pA?Pd3F*Uh4b_sHlpya93@66u#5uE%gx3Mtc9TNk}9 zIl3#Hm8PgJO4DzrpqqzhZG_*scGSeHIf17lZ7t^pLWCJR^Ir~YXa@s=kz7sFOv)v2 zXWK;{F55MQB((2m9XxK)?21W}ze}Bn_{Z98lRG5aY}H>}ve|}H z#{CRi5R1-=wQ`v1GfPC}o?0ae^^j){YKX?GY-~^-z9TcqY`iZ-kSDaJF0gw{fBL6| zQ50Z>^6$>~{{&+U(&zripboBoTp9n5K^;|k3ULO!s3}jBhW!=qIyHDPl6b}#C_&b) zy5!2jMO2;;QNofkQkl<~AmU~AxBf`tK{TEkFSi}V?X$=8ky4GeD^0=;*VEM%H`%Ho z{wvw4WP%~f#a&U-rqLnQCA2hf?x-%gC#{B{2^m42b_N;7x2e+!+&_zHQRK~5`!-BA z8Y4oLL$PDIKhOtIu7Z%^$i7h7LQuA&B=&bggA9@pnK~7XT~{QXj95;oAbHAicwg!|TXE zi_@ljzV*<{R*PJ9Qmr>evffLvT;L!h6}&WPyY@6&h`lFf%eltW_(D;HTG6x!VE)~b z8fv-AjTK6gFQW;wpV!#}gRn3kB&kx@7(kB^ZS^EqPeW|uk{l!$%0*$OE@5CLCMHLN zj|ZI)S)h@h;0jYBxn%22iVJ8f4CES=B$tNa%(etqXl%!Y5G#!AlXkq<-HN_jHomjt zLz5;Yp};IDq3W<98;Vb~p<9wH%9Lky(p4zKIWSZx$3dpkVHK96(=inp(XAd;R!@nM zlvZ5g=!480!wkMr&UjG2#@i>Wz%{0efz%DE;AH1bPS#@QR}ah>3LKD82>O|W%>j2; zXIznJ895Md%>sbM7liT@{hWl%T&%Ek5>|&{f%)WU0at@k5?1|@u~em)xMG;EXL=C# zn7v;<6__gBdx$_A>CxGY;jf8AE;ed z{VHSiWeFf-j~9^%*>~N~6p7RyfUZjjE)i&OK^W06vupr>vuk!|!F?)}CH?tFm8&Yu zcAm2BkLH=w^2rEW628Npe*=Ea@f+1|FF=fD2S?U9?{~4fdWcXHe5Nq`I7Do4h>hJY^o`le9}-z%pvRY8HgC28x{VMFsOg?yFz z@;|am?g2Q3EkdI9q6mB%u=~(l^jJ-}+?FvAi6QBorXoP&q@kbonq1(*&c>BBu;SE% zh2YGi7?LB~KM~VhY#gd!>UFnm2dZ@&RPi0uHkH10y)3~`{=uQRa(J-C*7k30mjr4w z)#e&)ZNJ~#U!Fd^I=XAkTDqBaIMjk3KHy$_~@u=2?zG{_ch*!ew@QUQWWVSdoN=Yk5f$KzZz3P&9sC7CRM_nK37Hy5 z4zl&RD`!HaXegf?n5*+)*ZUs0rYH^24ODEwndB5)yaIWytdiJq>FT{h+Z+x+ppvg_ zuC*ND(i0JF-YLA|MAmp}uGbUQz4I7y^XtCUAxO#S29-=t(6yCo&AJBH&09f3L}sL& z?(ok0aL+}U%eXapJ)Qpkk1uYITkmmON*LWPPY|rRpz(bx)Vjjte~>Zxj!~cq3w!EH zR*W{^{+@v#;ZdBrS^VEbGXS?#zx_X6vy>RnjBrlY?yFm*oq$lWFoe4dnfHaK94rzdyaW-0D!u z{+zb*IpB4FJ^Z+A>R4+s>S_0W_bco1B<>z2#y^=|;t7j_CaVsq55!SZt60e6wg0>n zp*JN;nz_7OLRT#6-z~4?u$%(j)SLSzHW6?=&*ahB%{Q4)1BUv~Xo$aW~}M8My8^sL?CXaUWoL)sAf^lmEtanNTLtK?JFqHrKsAeUZS*GZ|q zdrQXnY6XPc+#FFN>;)PPe%3M%YeM zNo;(E+gLez##C;0VE~#g4uh9Z*4NL1h*7q;hE5i-(V?Jb$a?7{FyW2O)TzKfFqxN2 zRUi67L(y56%PnHVM7L!aTk3vb9GfM%S&l}Q9iikh<)~dliIj+Nw8lW(IRbRu^`u9X zp`4`~o}tudrs|Q_5EehaRDHZP54zP|nHmBak?6~`vGp&$yVbYU$9d*}@H@MLu>u|h zp4U8ojhV2M<+dUXN;2*x@}SPLSM6tHkjRPfM;FWD`N~{2oD)IGE|pw0zUhew?dE$| z{F$lbjo@^dSwlquZneKCS3v2$z4)LJQYd(%Ughmb!WG!CQX!=q&_c*!poIuWg+fQO zTkVj=s8BnyWwONxYzKisgByF1W14lg*gw2{$3teDDkbL*8h6*3NZaJ$YuqNx>svgd zpD}6&!v|g+Ol)SjugcJGzVbZmPp3ui;of*^TWE7sd6|e2H~XmBI^A@Q0Sm{zy7|bp zvdlJ|ZR7{;4l#N;^|Tbj@7Y$!8U8T+c_{}C`_XSsw0SXQb@7lo&)=Jd08uSIX95GF zx~7-87gE@n>xlB$Qp@(!R0I3T_VgtRi8VK&pDK95_cVRi(C&<-UlgSsjz zD*?jJ`M=;~FHSAov(-*P z?xVdTq*TVsmi^ZL{p~4IBoJ(tvxST1#hF!a)6=`1P;|-gzVstlB@P z&sRo#;+-gkUra>Oxw%nB|7$1c8E9AqCjAU%DnK;_H-1oC`_+M#P)BUt?5(re%MQnW z^r3JpOnLKuixtz8hk@*3#GB9f&DTmMdMwO=YH%BHLcuaY{H}QaSFv-P{~5mh8`J*? za{m?xQ3U`YvRe?Kp2;+1gKNw77yBX`A6AjLb=#lwX=(Lp_CI3c3z=-1Z?7}eDY zB(gb&37`cM=Ov2(`|)T1ggHmFK-Y?CkpL<#;!jxH{1{~Yh98yIOoD%6_H}(hSsvKK zfc(Q;_nnHtlm#Y^EK)N}U^kBzSo~Hsg$tlH1J<&D)!+_8=0=!C3vj&7bqMAFMLm>1 zak$1I9xV(QPAWRG0P}YMdSQV9nR1oI2fXw@xe+79XU^T!!p3+IAVk1cHfZ?KkFuHg zOqWKHgk@SvHEg{scR?tmo;?M$&uVe$o$JdBxiW*Idtp2*#UYD&x@ z6&Yk!G~~4J4x==r()BHR{)1L7{*)0R_^>n6KjMqAab;2};7E(&m6DNyKuTQR zL4CwcLMkPwq~#&{m~lygDj1QKim<}VS-6#m0u1FNX>eG?5Ka)3sw9~A?#?UVT?9YpoXpc0t%rzIst(6_yc96hW9Cunuvi_oO%0t zZtN#Aaf-yJC2XX>7OZ*-F^Lh+AJjZJRxT0LLAi<+tzs}z2utGnOj@9h%fKyDRD=u z{@7ZN*F6p~pRdou#limFIg%@X*Wc@t)GYuy{)zh93O#MNPSIrq|nb z!Do&l9&#L|4csjS2K;EI*Ru0b?~F_8%QYw~Z}mc?1qLL65Ii@)f=I!4iDo>Uum9WOtJfd;kftOq*_t zIHCw>ajkmD-L76h%pbb9&piV4i2H*lpwV57W-KhAbZ(L^NckFt7}krB*T9`9(M zHUpeF@Nbzf2?f?i;ut<8q*D>mJ|utrzYw0-JG$cc>lkkTO^;A5LEfdRwI{E`PBl{` zpd#|{67zl5{;4St+*pvI19t6!t8f`>Z(W`CCOmY*5WkKgb1$t!GB0{bnu1Afm34_X zo5bq+GT3IE`j@%iJ0_|tsJ~4n6^N-V1!s&oQPY#{EH6%3o7X5&>O!AyCmqn3;Er&| z?q!Sn43ljfIzS80v8_;~>x0jnX(lK-WQLF*xaw2mcv7_;w8hSj=|VaC?Zw6mG0nc` zh}u^-%kF>I0Nap0J;RFmz^ew{N5DE!2l{@Q7&2K6``gbLk;D+PdPb=#x1!zg{-+ry6Uu zvgaZ&)=un=+wcomYFDo6-BvZy#rS7gDBNG{7zvYITd`rQgJyFH^pmP0pAjL`^ z3RSLSIRPb?WipV3ttIM4er z6igWz*tfcQdbnGO> z6(vP9Kl`|m8rM$9Ad+d^LMvA4;sJ2@*6RVysw;*LAU%*=1MiC??bM)Vodiyiqz)+^ z`wFGmWir%g@y{ex$g$z7 zBiCI}&^R&MVKZGvOM`1o{6AxKO;~ED4Y$qu1E=sD&G-Xo3d6gTgP?`!&7NvF?;02rFYjo{a$30PwD*^luLpdU3O>^1C z4BvoO;+39$`!iz}$`O)~s;#PAO7bF+5-AC~5(@|_*<|cIa%E~_e`*+wS9SQLO6t3~ zzf1TW>4&}k13Xx;kOyr^!~@orRK_`$@T?iuviS#AUxXrtDHTobN{fsp4wQ(XKiAdqj8pA}R`K5i%h9JfjT7vkI5t{T7IbISmjwBO3c_5c2dgPTx zHVaw`tyIur%oL=ciE;xWRk@b{DJEX#D)T!baNvg|EUpAz3^YpotN8-CKq8mL_zW^G zws9_$p+GnT21$yMUj$XNO`c^%LnCt;QB}-ORH}jr$Vw?`lss&z`07m4FHNdoRF!&v z)=x!&ERr;lGhrW5+S9=S2?*j#;mhh0I;byp^`!lwi5MhSzpKI^4+Oso6k`j~mwC*y zN|vkn3W}qyAbhR*iIMq(|4 z^55;f`HGL`u$WGmOj*6}2c)mTKU?9(;cRkO)@HSqBxQpEFhO7EJht84!n z7@5CHydYPnS?JCCP{Eb>$Y^BI-=;0Kbyk?*9lM+zeF-VZe+)ZUa*fnU4nK!%(vrpK zaItF-Ze@&XwI*3}!FHbcwa8}rAinU?dSjoD2{ z`?r&m)L3}^TX<|wG%?bj5}&BV5pQpQtrV8#=JEz9t;IRY!~YB?xqN(i=&`*>D|9L< z3@wc%{Ce|A9LfA<>e4ss{dH~ZvfKCd@zl&W=W1Usb&Kzb+Q;ziO5(kFF+{~p^ZB4pBs1?qEEw&G z0{ev7;5P;%VaUd41e50A!O4?&)ZoR>y03P(T)15^c1xU-cdUClyXlcqFNJwnAF^mY zG*a?a8Q(VSPTFVR!oCMNd|79wnZ(cvFrk9Jc!@c9=9pmteZKfE=UAO37Bf3M!vnat zZZtMIlOXrotco}KNpjM^U#5UkSvfbw)|YbIY!Nf0)8WVZ&vn3f4}IZ{Qc2iF?0r0` zjOnTQ-i!xr6^TQ#DdOro_KExUG}{g$AqUygVlRw$f8dihD{t0iQ|7GuyZq1Yf)8!# zqsIC-!`v?@#|km7IjHLCVgmvt;=1|WcLHcxldz>Undp(fgb2Zvyrn+wSdE1}Y3q*I z5F~KKj}*5cr&kIKwV*sq)~UOu(+c&D_2=-iCiMHiRuw6+rs?_{2XGVB0P~MshcDEWzG=bh zK1d`KO!1KMsF^YhB>RR1X+iCclYJI$tnVBsnn|R5dQ1h@fQ&E%4B+ z5Ed|aBriQ&x9UI^oP`{X&b@!sn-Mp#!eLC@L|=r>Vj75?7sbGC!p!&#M_fb?gBl{k zASe@OSt0gCv-&L{k5yeqn-uyM>r-?j?w5KFTFOM)w1VtvjdA+0H^@&N$`pf~@Xqc>FBhQhh&Y-nv3n*BwIy44z#o z{nYrofy>l(G99!|%%MMNYQc54(gJQAFs5Zd{Sr@47{OG!BOlD^DN?>)U-!hfNR=401v) zrg{qKA0_`_WsEudQQIfMLq-yPwy?-T*ONu%i^_VP5_OqIxBn;V_|W*EHjULisSo)l z;DpF|d|8e%&Ww3vLnJchC_B#YLb8bYCgiMNi(~c-Ge!(6p-U3*X*`ku(Dkrfi2@u> z(0qba_ZR!`)fdR_)y>8klE#Y%E2Qz?S6CDOTFjgi=TDPnp6q0$L{tRU3w@VoWr3BP z7{YZN0;YKd0J(&=>6|PVR{)@R%kvE3(%5_9M$?Ut8zrqVqJJhley@`;4|?RZ}@U^^U;PE8eg^RBMfbu7*#p z5!>*Y5#W>bhJXqQ?L@Lc6t8)2z+&%BEkMCUB`4RZP zJAq}zdAMj{ie0W(_X*UO&w-I1QR`xDn5-`At1Dc{y2vv;riwc0m)UqcA$9N6E8 z^5&vZT-yAu9nxdz4BodB?6x(wy`_x0o!ve+2ZhKzk?ra5+sBoem8sj;n!Ya!3u7%y z_Z`@COV@oHxy=snD3dIos>1ArZ#RpGmKt8*cww;zgplAo9)MUBd!#vuIuI)Due{N` z6J57#i+B&*IwKo2dZqiK_V=?Y!Pdjd7rsdWPb#FP|+2Ac%s zP=MM9H5e+__o6f&HG~$6owKuQWpT<7M5Al?lUh#NPy0;kJVD z35S1l#htYG*?XG>BCTB5dzGjT5f_p3^L>GCno2^_Bk z3P2mn#1n!sh*4x>(pw?NIGdjhe6{jl5)ngWuI;M0nz*MT(A(g(1)0!`8O}Z9xox!FZ@mlP$*dR-=39 z{c(@VUBO8#XvYUG*o0E3+!46zeI)5m3^{9pTSGUL91C0fI%oQ@8&=qrqS!C>eK8;q zy|oUD26+D{l@|w^Y8%j#oVHr~FAVWSR!;OCINGa|*~>?ZKa2IjCSP(~(;v$SdhEbaQs-9Bc75)KnoP3oW@sfH@ZyE$ z`uQYdyXn6EvXZ~MIV;UHh3l6{Go^D-_W*x~ zWbAlF<}!du{Vb0s$Za;REBL2&aUc*(A&h=NL-2=%^m9zMeT}lACe-;7N{a$l3`fL6 zT0Ke3vtQvl76+NoLtmnGq7#$Qi?c`;UJmiBa2S$~xJVW)!!lr5=j%s zL;9+Uf5}(g?u>_WiTek?uJ7{_-nNW?rfw_gAObhb@y7E0pKz=T+x*{bh#p7%a6|Yo z|1%zZmwz0)ckW*t3UIJ~mKu30GBwJ^gWmSR2EkSO*3Cusu8Y7tpaFH2*S@Trtr|2GUoC?FGlVC?o^%FrmW zGKY$Ark8<>(5wmym>(fTjZn}qsxgW3z)C;+aUEn3NoW!T$q{r%O-amel~}`)geSq6 zsAW_GBJ%>4QW+XTVt@1`MVULog&AT}(4+BXZ<0r5>I>@RB@PoT*?b!cRC5*7K!Oc< z<|CvbDbju#>yS_q)EUDx^-q;(ep%jrWf}-V-yr?iAe10(VFe4tKrnuTsDTjh0wZ)s zjeb#tQ0URW=&5kE3?rfOX;$`e(6>vh8o2oN2b7j0mj?6e|rr{$n>$72E(9x)2 zQ4@1~au6WLviupcDFQ1ovQEuR%q<;Jz}!&=#y}97%hPW74$>8MQuJ2>O=Wx?u_$Vs zHhrjS9CpW-l19utEgFS6kgM!dLzGqFM(7IXidxS;V0Dktidrrdw#fF*i2kxLHyaW@ zCqWxdnuc`3D#~n>p*w5A#B5pqythC-N=Ps$5H|sdg;Bj3k&rZP(b~A^KdJYMXMMb= zNnUTN(CCfKU6}N@f0C-Wa4}5~ELYxsnt_j6%l_)$e=3^^BVNmXPMY=8aB)=v^<5Rx z3@J%W4%P&`Dv6CR8w$MQ`;QEKB=j^kgP9tTiSiQC0i5knqDH_*6xv;z^VBtJwncp! zRqc|Vu#xeRpm$b7W)u~4BENjfOk{J$^0s|#(JvUNX~6l{D$6%?fjN%{--(T67_%@3 zOL1nFfmL4BMR%?J3RElMCTb&6WM_4iDB74s(TrG+kx*xRG0wZeJr<1dXO45ar217h zX*;|Tjj1rWzFLu~YEH6rt4-cQtJ3`)UyrqmaET;jrJ5S!?oqE!D9?A`fTe#=~nP;>ugH^Bi*ne z79q8oo@y?Wj&E?0h?#rYuDF$8K(%zjELu-$^Bs0AAfrAum9oQD)A6}sfsEQwwK;&i zDFqcfRWdylm68ZR#1m~{cJKV9Mo1kVV%K(2O9~m|O9firj1>E-7gz)l)T^E)3*#M} zdci8HE`vusCtXA0YqG0qOa;w5rhk|tGJmbgSjx~u8d2Mbf#}XTsj+Bf&Y@-R*X{f6 z=ppUU|$lt-4qu&Tx&ePd?EElnDSJ{2td^}^>&JHT5FVQ-?++AW(U52HEEBc~2iaObIw&bdv zvQ9k(Ms;y66!?;%iuKj|9u_Vnz4lclHsG9DGXT{>g1)#$t(2IeTIeLAt=v5(R=Ag@ zh=G)VWlAt5I@lVoM^du=)0OvX&*}85=-0pprO$HsN`$BvcApMufYh(sC;TYQ2p!9q zXwpMue%|0^X}OZ&WwjI4{^|}}d;S=hv9Q(ky1)a@>3VogE>b`z`2AboTS_>9urx=E)hAaJl8xe4`Ris2fY%dXw=#!Ox4bw8fkv_#-&7bTjo>=W(Qa^WOfu-Hjii zV7&Rim1+j~U>fTx+$qNntQ?@+aO&>Qbl!kB-SsHuS72e;*uP zng8PKSN0EDMmgltVfd%j+P!AZL|1Iy8qet;`<#l4w~sS0NG-{eh}*za{3@_ zuysZ($AtdO1?4z__y>PyMBtv{(?JFtklkl%rU3X!2vG(#qwH5Aap&RhpM%21mJn4O z1vC@~reieB1s7s%vCJZQ4>*Qsz21!;{Z5AD0dj-;+v9!55^%F%dF0Lci(7{0`Tl_M zfrDug-b*Vp5QZa6VJA3-@9)`jWG#Q&8xI^PRr)J*3T&$D{o8AVJyTU|P<5W8Kp_!`HqoXMJ}D}K)TD4}DS)M0@pyHFNe==2w_MJ1 zv9gvpmL(QyhQMapyc&*&I$?JVl|Z?!aq}8gG=@N-Jl!Tx3mmZ~G`+t^^z^!zpV<51 zFSX;Y!27RgT@aLr#a|FId1(B^q5e=!zSen=AHcs0N2?{R#E zPl5w@+FWs`>f+5Y6mNcc=O1vgIp{#2Cr>)^R>#zy*;^_Onh4>f!iw%d!B@Z3S^@T| zgYMWeN4=F7>7))6dFXoATCRuWt{(h!k+aO8wvKqEAt7!XkI}bl!`VoeC&JdH!|`I+ zmLZY+5-3%K`jU#BfQp`P8d=uo%()$G)GQefYiodG5E%zfygg6bc-KTA0sDBhUmN|fjba)33Q`Fh}7>wO;25fg&| zRbQ+V2nuE6@K>zI%8E+Fose|T+wIs<%AR5F1#gxVwJyx>rwjHoM^n13wy3Dt_ieY6 zM7JY1nmatt_R|0}Qsf_ogCChwD5K^+t2Fl9kn}inc?yU!(ZGx8{L)}GsLD`y7(8A7 z0&8B&b2E~tI5G=m=A`!UM*nVW}JGiH*Ut%0ThZg{l zB!y$T^h|ZUZmGLyW(q-pdnRwJq}w?PZfC$#S&99=&~8ESXjxCf!=P(Y;YW-R&&hK} zfH-a0KQZG9%x^r`G<$B*t)hDzMOAXzedT>)*MDNbkUFHc;GHhyqvfFp(ikZZV=mleIb43W&qh6%t?FIaal zWBbCAQczwtLk?OcendUqv+ktq?B)USpz53xcPu;q#gmW}+)W5bW7MZQZ&45d%#<|) z%5$rFA?wk=9!Sp_g=2^hO#0sj`ppsT>1u(b=lg$>o;z=FIj$I`%)ou>VTyZr-{%o8G22~yn zxw6J5rG3)>Gj@)Hk1*5UiN$D&^67TUchdD@D90d)YLa{Lea4FV*M@ZbbUUKV7Ut%kshE^^BJ7N-yPJvbDlc6(S!s(eh%s27Ngk=H;NKIBT zQ=ux++Cusu!_&|UUTrAb(7+H0Uhx_}K^W9m*dU>k2h!t|*|4?sjUp}Fk@a$EGO@L8 zM=?pTRhrXiRhpA3Sxm<2diQ>!;f^B)JP`znAq7yw2^v%&;}d7r`yo=*3p)H%A>l?Q zLWmGzjzDI`P#Q?07gQ~=qRzm|;2s9+mMz3JP|qz*H>4NF_bE(#Py$oO{6zdvkw#V3 zEjaI_j3JE}elm9!H)1vIR-iFTW?>G4hexATHEEf_9C0jaBF*|iQ%I9XENV0*99~R( za|tV<_oU=mh-4W~N**~%=opsnCjKXi+8pbB(1Meyq>5wy75TktAeAv(1tuP><~ZnG zrJ_W@B$8F3%BsBHJcmk^O|4mbMWgBE1UYrIwpdXJxk6YJ>9Inv=_6j|D}t&pg4>hw ztn?y!%BHG&3a&9*#H`%TDO?4wTBu0V8d30QN`PWmeX$1XQD9WE5Ye6$ZlmtNQon_( z1cak5eSF-BvJ+$_)-bHcT%{<@s^rCX-@xHlg)b_VS8D_Q(QxyU4y_!I-Nuu@XLj`M z|6WWu*#GYqxu@MiaZ1g@sP2XYj5b=&zfOTnMT6L(*v=8h+?6W}$j;;h)mnqMgky-8 zB(Rpf8U7u;xi${8wM7-#9UZ}I*z8cK-bO*pVmYSp(eZ=WyP(1tQmY~sv5Zp5a^@0} zL3~XF)3Y${2wIhtMXz8}4YWz0JfZkZ6>P`IW@a1sB2anVc7jPpU33HP!v>DByz+(l z^_<#K{etNH^EV`TF0H6`C^Hdflaq=h*clJ6jN247X1#^Gi>R&|)U$4H!rYDZ99?{X zXYF;wM{`zQ*CReKlR1}r!7SiW0p#q=D>4TCegOT`24+^9gYQ#d)@sP|V#(2{ z+tcHwAJLl=(e3rjlSaC{R1%FrSN|CU1#Lk=-m@D!?GS`9Q z5TgOUnlR^u|blLQ`NKEJsE#{ zd>6tE*V5W!QcHvZt|kFNQ4?Vd2Kg+=$R^5YA&h0L%=K>h9u%WWR$@N8c+9~zSEf@x zw!{Ji>b?H#_lf;d-1IV4G38PNG_La<$%#tVgEixO-JiE0XO+U#2HvYpf@%XCquK z5_gEdi=;K&_3{s+mBCi#IP2g)%SF4OiDjvzA-R}f2;AYo>w~VZM#jNoNGQcw<4DY}MH^#(q386* z63=Q5(7{aA@*VUSOiiTi>2~KQ!5d|C+ArmdMVq~2kCcoJwDphez*zbRU5pB{oBvmn z`+tHi26E;=|6?oWWMTeyO>+FPn?TMSRUGNQu$4L3=6&))M3H>RUP8i<+qD#CB&Mq2 zbrq2_i;AzXNJs)*0v$O#Km{a$?uDSq2LWaB1$;z0)6c_wbFn#f-{pFFVJY1f<-3_~ z=5n9D(vvDQX@b?~* z#6ln161UgE5+>E~>TU9r6&y3w^e%e_32DSZchwyYg1Kf`!|7&YZ70co`1mGkW`;U8 z0bhx3OsWnUa?Q5>t%CD+X>9SdwrW)7_8g6&l2pO=E*Y&kHPzDNaFAq>#*`AsJkV2=@!!r>OkB#9t+6P$LYmpFs6X{-Uk*>Py=eh$mbX63{K88GhIwDM3awet3hto_x|TUq21186$2IAVbL`REO!cxGS;|cGi-C2 z{Dk1}ylmM~~lt-QNk zis@(u(Oho0DSX92LAtj&Bk;LWv{vD@q8J5lMiS)akSyP@tcAR z+~V)L&(Ngd*7SIJJh~EQ9pL6}dcKJD?S5JEZhv~nb`kI3nw*?So3SrR z?FAh!5$ez4-sL$l*e5RMoU0PvR6Hf=HU3!ny8E?}fhbqIBJLi4*p-OD_ZsZ{=MT&Y zUg0m^q1Hoe=QHd z>udT)ukwW69wqswu0FaCu#EjGtGd27r7u&id%s7|A8Pg7FHf3IJgwpkj0NPQH#%Pi z0@qwG`CGmJu58Hj*I>@cfO5ibLbtTvm$G~2J^tJ-1itgQ?N{pYw>eAl*K~V6TR`P! z3);M0KD>9{8xi#Dy&d$~UcBx;S8KWQx&0YEA*kke7l#?CXAwo{OAM;OTN`|sE?zEf zG(yzw@qNEK>DTUdy^LJg9je87p}419#CCjK8JVe@gkIfkU&}$#s$7{8!c3QAk_UlP zjdV5%gEKW_bgp74(gS-SM~4c78C6e%AP%i=Y6hvTv<%eUT%LwTO`;b;^10wHh)Qj2 zU7!z}Y9heU@lZ>w4Fs)OBG`3BFRo1pd1vjdBcGv5{L=8p*2e{~;L;Gao#$M5jeF%GyV{|B?%A zuDUn6qrJu9zIEqPNL`g`CiI^C1_}yxu=@y)V9lq_-*Tze4r8xOEL^FA8+(p&12WV? z{)8)hmS}MXMcZ!97$6ucJT|4!`~c-s_>ezdR$nfDZX=|MwEfi+PiuS^yVlSHCv$6= zvIJWk%eHO`=L*EmjiU5b$bp+{b<&6GN9%eRin+^Jp*VlM3&_ds?zaN`el~9fV1swt zpX>p^Sm7q(b6lf5MxtVzcMC!hjJ{L-wtD8Cl#ZKn6iqvse-RBNYz8Aj^5sQT23={) zzsD=D+LR`Es3}fSoH&x-aVDg|C5RZ^7-%v)C=sS1?JJd0$6!c1%;n7#rMwvr3G{)e z(&t&S1|vYl=F^5sW16^`@6=NPq($=%L4zp}^R&J_XjHGa@$@}u5M&*x>(&Q3AKJ_W zE=JN*rA=sz+Tv0h$qB=?GW%|@zdE+U*w0n?Yo6>g3mt%>mtDZ_QPG_8WR$|z5tBw% z<2(qfEWEJ`jXv+H&(-SG-o84|n&IZ3LsIq^OQX(e%d5#om*3j^Bawj>l4>nWa}NV3 zGHs1CKkB^pWkKm!T{>7kQiEvO=UC~vSo-(@)5P7D`KaaF@Xk6*JG|9=eB>~g{Bu2B zD$Yl%-?S1RERu1M1mcu(ozs+Z?Z>h8mA8Iz2L8E@`iu?PPv}0d@+a!^UA(q8fqL%1 z!h@a5Ae`B0WfUmC9La{VZ5I%ZdDKW=yot4zfQe_mm`AU6nE@%@?Z~NB=T9xcMzfyP zt7u%Na2q9(7CSV~AxWEH2(v^+h|}F&wB-+T_~!AxXK2nO+%ruQ)58w*j(IhovvWiq z=g4HDwfN**%N9LL@s>;VRu~6IDx<(#qd0Ry7S>@7==2wfyDq<7clHzMhUeZYlL|a4 zkGo&hH+S?YnKSoy$r|1Sm|q+3n76H3)>NThm}8#)C~Xckdcxfo4pFY#rY+~1S{w#l zX8rMME;V_KVp<)@B)q>8)gluQ@)74w-D53?kN4{7Xf|d zfN(N18B2G5EkVGR{ii7of=;jJ0>ioEJe^MeZGBf5p&aG{!J|3FqU{Dj-AyEW7_Dps zhaRk5AI8DglVGD@z&lT?yq{T)(iLTAa6w4A3nVs-Zi>=n9cE-D zV~#t6vsH2c8XVkL9VZ5l-GbESl(x*3&3Ny!+3qk6lBh8-cZJ+(V*U?bNT!@Gb68{u+=F?;Iu}>EAR2;F%J;33t zgaJ1wN^G$U-M}}CVeeS_5K~{f!T)MO|Noy#&+%`9ql^9tj&4DK{;xhk&UqwiC_z7S z{6^84er!BJxE7d_`y!oIXZ=|JJ?i%3?y*h@b?-ceH6PO2z1_+6bmMH1fkQ2pwuW=Aq){v@Xr~WJ!Kf}4SSuN&7dBq7f%-qOeZNG7 z7@mlt(R^2GL4=)NZ$*2W(D?UgK~BusV*yUgOho&z^{!7SU~O3hZ~{iOpBlSrq(G&t zZ?wQE!-*lhIjseqVGCHfF^yz(XFCnOa5WmfE&~ddngS{Yqu>di!B5^6Ik#<2_j?ZDmtVbjChCH@zx5n7BuAJWw_J=C7rC^wU|5Lr|LdD{9gL& z50lsDCcWcb-$5PWQTgU=?WYLRDP83h~za{8Tl{LiT)N@ zq1*dODwOH*8ANJKQp#i45e_BMxbZ1bLW&Clg?xkslac}pFD@{t09gXvKw8%>{D&y) zyqPd&___SV;|63Q@Ah2C;fQoPvTolLhn% zq2Og1t9;Wy2-bO0$^Z&Zbqs&XcC4W68r813@G>=K6fk`ybCAYb|DY5&Nwz9~Ko;v0 zgLxg*Czzy1xzU132!qB1Cyd_-Y9JRF?OBb6;2)UAVdWoWof=@?M4p&f z^He7=A*Deko?%5+w)}x9g7I9D^OX?hasi7Z;?Xp{5|8OJsU71M1W}Ns;tk3jRaaua z(a!`ZvcU;ov`*|GYX?p&{rKvJ>d?geGunGW=YWA7Z;sZck<~D=uIgiUlWusj zw@0>r6-ZD6sz8Jm*WZa)y@`w$mDipWgOIwcSsDPq6Z~_)KuZXZxA=v%3I<=a~FFGC;Au9yzr5n!}r) z>HGdlH1&4Z!rt@px>oCRb3H`sb2Ww4^ZGos_TP!r7mYw7^|E=Fc}y3b*#$s#_j$QE zVABQ={r3j|V50Z_)dlv3gvZy>^OZ|`j#0)u;P4yInZb9T2Zi zJv}eB=D#F-r%sXFU!iLGH)fhyFg%-eojzCx($+JsUKic+Q1ec0P&dFNIf?15GtmmgM^E!c*Vy4I;-e;1iL4Dv=|tqlE_|#2r}yhp z*4^wO<`nxqMRCx3lF|)el46(?Z#sx0B-3U&Skxwa2n0Vv9 za<=i4#mbm`KECS~wbf7M@w`twC)_tWj#$RAa8f`2pf05w9A$t{f6vHSDsW9> zj2LKD{78ICLmnEBNy;$XUM;l96vH>`71sc6bYk!4hxUD}(Kd@(!r65mbjvQCj(b)a$0x{%dLrlECx;GZa`-(1w~Ov463|)*wP-y$=K=U zN-fi*Wg>9?i0Y^XPIwe>0PCYoe zA7Gol46pl~Nd)3X5&6b$CLaKXhAjT}m8-+MN+%cev5>38OTLA1;2VODk9)bx>LgWxoyD@tWTpZjUz4R8D7UfJ4BxF*@q)A9Q%N**v(k^ z?hNGf;WWgJ#Gx8W&>AJW8SVfNMUK)2UTuw%MEw2egyI)v1oJ;)w^zn8m3hyC=Md3+ zfUy8qm~e%_`!Bu;4k(nTo~<6Kkv?!zen3nk8z}sHCYd#+j1asmF_2#AYJ-~<{%25K z%8i7|@bY5a)1yo6U9C}VjbJ6dV2-|q$rHXITR-kPiF_C3@d{)6>%(QJC03*$<}B9@ zUVi{*<&n)b#LhWnFmn|8xX^%IXv&Jdk%BI5c$0Y5Pgy2WIG<7m{_EuH*J^tK=y~8H zQ-5k9Yl6ADB39tt*UK6CR%}Q`#^10z_&SpsA-B+%8UaKJl;7`IxIcD2?pQQSg8%mj zyTLiGw@p-_&N=+02o)K7cCP~@3B+Z1h~vMJCOsGrorNjjI7fIJw_GNy$GXkO7Y6-^)xO_A`nr?% zP46bqI0wayHuQc2_K=R_j1NpMuP)Lf37?FqVhP`I`BzT$^&h(1hR!AVzgp-1CxH6@ zSLWV7h3kK#N@}yiLp@VyHq%BTDJmgw zGdgR6?aq~3(aLfZZHy% zJ}2Imk|*{{mdO`JT6XOjvPC87KsO9;?yFGP{pQRF!wqQp!NMtEE0(T`ep3V%&=>fw zGM^TSO~9mTCMoKzBEl;VL*b^9O6=0SgGycyt`YMc1HC#VOm`;X6B-8n|03<2gCy&^ zHD9hS+g<9iZFJeTZQHhO+qP}n=q}slY^X6r@7U-(NzdJG{yOe5FfI4-`TerDg_| z=Iu;szCcM^STaRRNLX^-Nq(L&y@q#C>+=`K9UA63QrsbMU<8W}swiec_qY@-ydaz?#YlciaH66A8UH-7M!^Hn z&v9flRGJk-%5;upyCkVBZ)NhO+U6hF&83tUy!q%YK>BdqMd*paC`$<7lO0K>R?x$; zWgWps{c6z#=<@)#euJuJawjP@9&(|YEb8u5%dUiMw-yx9+UiT1at{H2>{ItNj0 zXc4B!i=Z(-L%I4D0e2Fu{pAF4Ipp77Za0Io&NgnYALsq@r!3JD-}ZJ7ohh`LZVq;D z4}TsOJD2;%AD2VfR%dBde7QZ0MkuPPt-!qXot;AEaV0H>lz#2bKio_|hBihnE{~qq zZnJ@FV|(;m?j3Be=W2rV6}05|OYhMJ(~jr(3%%U4jXIz4<`59ZQIF0GxR<*m9%f4jkR1|9NV=ws5M zhQnGhCvV+LHJ@wYeZMql9>&HnBz!k{@N#zP87^y8ypm2bOm#r`kut-E`tslg^Mfwh zKJfOQD~hFTt3;$EKRwwPoB1qY33d?EECXUWd%SgLMsUBKT0OB$E`@Oyo9&oEEi1IR z!5xr=ZgmN@cI>^dZpHj|2a2Ve{cU}V%Gqt0%6XXYN;C&I)4}3O>btIsF~XfxJU2C< z7P8fH*7vhwf53vThM_KpF5}mE=q`2ViYxbGXt&HkhX@Kv%ko?74q}x4ur@>)u zTYF>G=g7IT)6=5AwMVv+-^e zSX(SjZlz-s)T!!PShdOLfoVI!E<+}*Bf z_4VG`=TBqoq@OG)qyAJG8;>ZimE+%lY$cUg8PLDF=>I#G&49YX|4mZO^xtGFn>3|u zjsG!0l5Db4NfDAr3Lx;i_iqB2AaMtR2rGcujGT^Kf-&I{yuxWe9J{O@g>@y^8vK5j zpvw*hgeT*I@(1}ZPGt5|7hRG+g|%WRQ8Cynm9&k_6~be@f5RLCb7dhHOO z#Gj#`C@<2`lD)TZLTweDWgC6AK&Uoo)XXoJrBJnNEIAlsa927=BUWyV>>?(VN5U|i zfKYze9A&6!=PmJ)T-RgkD#Kdq3lE2{kO?DvO@u8Uf6WyZT@llNfylX-L znZ1fKa5rRcDN2Yi8a%|pNdHS<2L_K|K4Jr@Cq9SzPjiD1H7V4f-ZF%Ic5aJbtR#sY zDE_1^EkBscEigO-yy=n5l2O?iUFPQg;A=552vT?Ck;5aL1{l~29nl#GS$!phrlCd$ z6r!^9)X9i1VKy((&xUEHq+!nym!FTpQuZ(TsR+&gFk{KkaK4}^yTA?2FBtiQ z>L4>8hn8ZD7#}X3A1)@GCdVMitVhg17D^!%_xX3#)q=m3f5Er&L^f< zqeG~dV5tHFg{{Msp<&jY25uHq#&6w@Y#pj`P+$zW!)!of<1#YS@D5pVp~KSHe6WI< zsLOezn3zM{z&AhNU)FKiviKrwR2iA=#Ek_7YnF^)KvI{AlEP*7DlWM>A%`r`{YWK- z^Ni;@RM^;23T$A0OfLguEG_D?)dBo$zVX(NeDh4vGTy^p19ex=9310j}7mQu6Rq?T#j1$w|WFy@e+9uf^CB5 z`E@rrGN>T5Q_`-HfRO-=^}$&uW=Kh+!(pj}KAH6R>l0`e6o+Keq?G@S0B2&+vMi0x z{VT9A>o_R~UC zhf@-j4`Pk0?8~e}AL=#OpJ?dYsDJ#U8Xl<;b_{dJitkX#5bQe6;cOYF^YmXNpXuu6 zt^E01oE>40T?1254dq|EA5kHr8(Ar>In~<53-EATa2NB&Cy&BI-1BH}O1CGs-9Dga zbEV1AO!*I~bh+gr2Vl)5t#bu+v6;gI4T&tefdb+;q{L+2e;9>6{6Tf(d%WB1d|qv> zwee|tuYLy#X}CU#C0>}kuKj)u0xdKRdLO_9LlX@jvMVX1WXsj@_FtFNj@drs z{(CpG@s}r-Fv)wVZR=2m?{rO7p*!L!tJ%#i6Y_gbWkJfUu9QF0#r zw_4Z^8X~Z`_Oy`dDM*D>-GujA@c*ccAEzCqQU=D}=E)SX7uc~5?LhOU+e!20Xyv|kO^i)XRy(*6cu>lHi6PM`EWs;3&~GPb)wU}GUGoalJ%e(&gDB*3~UEC9>GmWDA?0e>*H5#Ph^19Rgy;+%?FYq_}-Z+!M zNtiu60}av0Ke(ZP*nf7A(~f!0Sj>Q;Hi*rfbsdE>1?+?1s+mL8Mp)s_A^P?}c6N_S(B1)9e+-@EfB=1AbI-ys z);(*ol6}lmOYWwP?T@`}AL=Z5Y8z2!H8?Jh@)E$j%jNw&VH8QWCvs6!EX%OtlV^m@d}zUP)R5jJ$O zh9LLpI4>ud)1f0LU&vUF++?s#2EzmNC%>l==DT{U^?6x^m|`8U*?h7_)Z#@$V%c4#s8osX9NP21j|E}YWVH*Ou^_e#JH6D?fUbjg_< z`fUE(51Z}&**3h-ZlED@0ji!e+5ee5O}zIx>7RA%VCQSe1hsL_HOr75Wv?NUo5Ua! zYY9R7Hwt!pccp$RYVosraC&xsau1-Z2WNDhNocp%0N76b#va>Z=dtl|+xocq`fdO7 zX^#v*7y(kI+WA+vtN*VK^i1?j|D6N9Mz5`IE7CPWUbX)R(#67ty3pMi5f&KmPp)9a z?>HhXaZpKmqf^WEaB9dDqaj5N0zb_rKFhp7CTEJc{BI#7r^~r|!BBX0&L+(WT9sJW z*ayj?Yt>)5JYvUWJKiy_xmz ziwsH$FkzsmG=z8(p|bq-n?*!@lK++&jf&wuqyUoKFuP%0PVvhjAI1r5? z0aGY?uAohZzd79Ts9HYHpRh_<&(FIquP>t42$H&iYlRAE5T&844=aZu7>E(00TazF z4mey03Mw7!;iouA00Fw+oPZvg|J<)JAc4p%bXf#~@u0Dy#Vl0>f1z-?`3a~=ZsNlr zlO1#9bnP9iL%v_)9L`0fzv9U4?PPA78q?A-jj8kV_s6*eU^E~QHEv)pe$X(^cat?? zx=}O4sSO)CIxyGO!`2dk9=BtXSum?pxipRw_T+^4gDo%8$K^TX_>CIK#0Wt`F?FU2 zzu{m%5pF^ulM^=~8d2v9Pu389M(xSe)E}^KqrxpE*c4z|gmcEDMi&K}gprObN(xhK z5uX1TV3HsfNUGP#Pt=mjnS+8NmnAp8G}j0lyFz4QU~l0&C`CR7RyxIOZyL824jwk7 z;NX|!kOzelu}Gv31a}G55CftyAdp`WkS1ogPmrK7LQYKE6jK@d^@x;|LADW;$65Q6)3e4bu&Ia?SFovfLCILGy@0 zY_7he!2xlbz4%V$M3zf;SsD%SA{TSed4)&xZBaNRXSDmIP+ZQ45>-LT0ya~B5FQZ? ztM<(lbi`#CNo!g9&M_3oqwRH!1{ibN!+C47dBdgDAllX9G{PBxg=X6Lt=^(C+ky{v zBpOl~f-IX6{c|v>oCA3297xCA2Aa{;NlUO`QoKuY1g<2jPHIOy>SeWqjl|KL(KM*L z$ATnb;NAnVTyNl*YMg|JqB4W<(^OSySj*cn=>^cS#ToA~E$AR129W6B{O0@{_!`zq z;RS_+@;qV125FURn=2Lc(V=Fp6%5URf9Fs$G znF%k3oZO}9o2nG46%|!7KTVAqa%-vs?TJn-?Z#5-X0XwaYt&e4{3RZ0_jeM8*+f)i zGsriKk`5bpB3j5mhZru}xdMR{pb5YTj)$P={f#;<<@B&{cNVO7k8PzwO@~< z%3`(Dd+c7TEiXRiBtzm_QrD-aLpNJludQ}B-0NQda%ML1+`ed(?Y>&Q;e?DEW>Ld&CzCC2mwtRJTwYa>W0mRZIr~Kp6 zLw_tJdm`~4QkJAEHOO1gBdV1eT?{Ay#a4}Mo2tjHEqF6ePdbWkhMy?Y=X{hbHXfiQ z#76c7**FMKY%WU^)bFoXBQyO`-9^5wcL*V3irUjEC&^8tu%_cHA>eMrL`|w2ZQYG| zSR3;#9Qe!0-FH@omi`Ktp{y!55=f_ngHT&zZI&Bz$BljQ4Yq4@nODg-R)_ODVWqmyTQK^P9|J# zh#h z%ShuHv2e4$UA;O=K1&5xEn)8FsASDg-hCe2RB^K;h(r7&z^TlB=8a=?5iF$qWWmeK zUvL#1RdLboWf9mU8vf}#HhhUs)mYDn1L)ATF`rqPt$&U({GDSRDz1rG8(|wtL_B6I zD_9m`i`ot|ZtrJp3GUDd-6#vVd zccEOs%{9%jm@HRZegZCBUZ{<|T|&M(_6ZV_hAFnCe3HqGk+1;uTv zK4@N|JP`pjuj@lN4H;tBPRe&BuN#CA6{}h0UivMX^FS=}aIU&_*`@U~Zrf zGw)Cjt<{k)Y+@wUAZ>OWyl^%kF;kK!=WaY@jz0z*#U@K=m$qDG)!{5rs#dTzTZ1TE zKuqUqpv{$d1Fd8-Gar$!mtO`$K86JZUYABAq0=m)6SyMp zbyfSr2*Ye3*5fds)9i*|b|NL-b&$6(%%14T*+!^X2sS03*GQ-pHxLR~lF=_k?Kp>I zaFPgi(`d9I;(X&I=rv&-!B!dir!igvC&19nub5wXUjAmbRM5-Pg)GryegYH zecElT_4y7pm3_|Pe%m}c_6ls`o!;A6hXJsdviDO{!b^-$HVqFN9C$R?J_BIaUe!Z7 z>;$djJUjP0@crlDD zzdG3Ta(?W;>i&d8IDKB}pNX=SE`4`3c})y#ZmiV(_~_(_*=+3e?eTq`@4fc<{e3-O zI-8S&lN~1Ax9;h%&o+FKU5xYFV>e0j)8S>=TFb`AIyTu0YV9%2x;1U)XW{!3$l+OJ<>RS^cgLAyHweG3_tQSw67KQC z2Td=dpryknji>qjW^iqmM=$Smks(zZ?{fWaw!WZ#0pXy^o{?+FodgQpczFI*{eaXx zy?;p$E%_rdtT%~OH~ir3@T6RDX=xElAYK=&gpKd{C%)sDgyFOVEI{t|} zHeUa0)^VQ6k;n2F@mb2_^X-tS7d!6&u0e*jbThGNgvHIOABziM87o|jRjx*ul=^}s z7cWm{Yb04Y2|$559#~1#Je5DYTr;Cd*KgO~!M=5zX!-zO13rH=!U(l=E}vH6@34&B zRP8OvR=EN`Bu`eto9)&8a}I1jZFSx%H{|B23DrMZK5`R3yZ>YS0LWDSJD&f59Or)( z=PlCpUstO^aedIhuC6BO+c)v+&Y+Wh1Mo2Z z#-J8JaN)#xe9R$f!8bTq>&FtFZ5AM~_-NUq{l< zwH1}V%G!&TP1EfAQ+>MqReS{LbrA6e3Ja+j6n_!1N*H6u7~Kd0Y*7i_Jl;lm97JuNPD9o=#K^22`?`J_xqX_`du?PL>KmsAW z$&mU5reg_(O`25ztT$jh1VqXx2-+8v%G?J!RLt3*e!wY6o`#AEO-39fsuo13fCV=v zWg!C!%O?t(B5r8rXSg5{fR#A2s5Wb4Vox2U1au6&;Y57z!XWJeB`RbZ5}2jVKF}J{w0V^R&^T^!I;l1L8j|#$ zot~H^bdrOVrN2x7K@$@53g{G~1$;q1yIKESDNujLJy^en$O^OCy^-`_Vq)_j{L(y& z8x8Ud2-$KwG(s?meKnLE5VjS*C|GN&HFGL@FNmk#VO)G}9tuiwC1jVFlhmTcoN;M~ zIS@v1RH)AT>B&trDNL2bZ$RlrETTGyImo12o5I^xJXW}Gyae89x zBHb~ukxO$rakFK3oDp^+Qrh21i1gQ{KA7Z+0TGuBZhKu9E@twq=16<|VyH<bGU>v1ObL*#d(RgRz>KVR|x=>+kewA>G_x+B4z*VYQn@c|2*B;eU7%6D4G@CVTFA>Om+FEPuyQd%zh2D<0M?$rNI4pvAxi1mvjjXF!1dS- zx;BF@NgmImGL!-+*g{4qpHtw}chG2WuL;mOoyg2yO~`Kna`(2oobNs-Fd>#0c+Kw- zt+FoA0>l~9T;PO>+t(MUK@vrS+ZY|NFxI}*Z3XO4gR^-c!wXb}QbtMPQH=5OqzfXb zi%KFm3(sOgC2Dr3jB1@uHdgy%-IKH6)lI9*x^3Q;55rGyBZCErZXZ`0+ehX-q}U^#CA7+=OB|({8NxXV) ztS#7cR2KV^nbLXOTfz0W1cv@k!rW<%mQ z>p1_JTG-qrpHmdKWxR;PAuP`c7DS1iCFtEN^^xvjwsOI947D3_AWqFj&~zw%Jf zG0>QQ8?!#Xg=%#IGa7BRvd1js#35q)U z1|3_x*y9jx_SmoZVPd+oblp@ua>6$ymZZyZ18pqyvDm7qCXqImLwcv=T{es0^1lKq z3>|zL`V~4H`A$+qxQk;$%!~}tQ5WhHKdYr`;5J#FW%vJTR@_oNg1lyn#k zJ1`{orS4DGO)P(o8>Nd;pOK1wRq&R51vyd1+cdE7%yT-sAdfpCcnSVm1g$NBuC=P| za^Sf+`?$zQ2dp~jMC*wD$`xY&A3UXMJAki(Tg)EA0%wu9irb*-(cI>0#; zA9L`HS+&oclF&*gr=&U6ttuW)Nmo;9QfYI*{%I=S7?nQgl|G~%8t2yWCN-YBhSjdw z%{u@OXZ3as+sGytsOGP+TaK#7mDKQ|1dZ6|P44uHx4he%dX2$g1+#ncW*OpzLW}H+ zj6+|*8encPYRA9&5C3<(%NZG2{); z4TyYSOMua`I*KhvEYOHwaG@Yc9OX1AJZIFyIN{LN9xK?L5Q&D(5D6}$UR`}V3Y<89 zEIV3dWk{+>eua~?x?x7+7j6RIUY^{FX%2c4od0-1bDv>i!+3lb#C(KXuu#*5InaQn z9u{>0FbywJ+#=j*5>vc*ZPqk#44hfa*v|q7s}QSsF~Zwc^>(u~I&A8MipIqW5(Q_G zd@ZD+xUdxWTljfDj=bh>6GCmd9W#yK$O*0#jOcw_m~hU!o^*%_NQkEseBkWzIFVP( zSItTd{;B`etZRYtuJiE zZ(30(Jp5oEIGMogMD<4Cjba*NLZE}h0zh+WKhaq>*|E`RI>`n^H(~84JBC2J1n4z{ zVa4t?42Ev>+zk~N8XWUmhlk9}PSdz4&^}qvGcl0o{owpGV)_b*t7#B^h&j;fHT10! zjMHo8aow*)84UuXb|8=Ym4osGHwDf|jgXj>2?5y3A(rFO^%8Gl7v*Wc9mF94(=Ean zW&bf|*a$LRP-t2J9w`B2su$({D;lKqRWs5ET8I-o=NGyu)sK|%Fyfo0A_54!NW`o) zAk`lvd@$i&kqLm#-vAGB$E-RW=Lot;kr-Psk<|#R&r08k2)6{L2xT!1rWs}mH<57U z*F2_|Sg90qi6Aa{Ch&xn6LEF`OBmR7tB~LAk;r!a4G+Gie1y*2P z3mF5P{A)sKVA%XWAins}v~{(4nV6<(CQGm$+{4I!D(dxE_K{ZIr5O!X7-*UI74zMr zF@HeZGu~4V)84vCF$!lFX=;HlaPy*T>ERmWFz7V;%-z;=D%=TU2yZ~-M7E_>xO-7L z4MN&`7os@r8_;UlQYy1H;Flo29|kxe=oUd|K@f%asGLakgdM-9qRrV?5~}#TdZQ-p#AJ^ZP!%U|4aV?&IzPc;R?0zMX4wU|6j# z{(jobb~j%zIJ(y8{&oXJm&d`#xOq(F!t==06k)1MjTe{Y^Yd_V$ujl#*`+!T6;<0^ zY5-OR1D37LOcu7S@{kM~m3pJBv;II0((p@pzJ$Fk1yK^(1k_~M*8wUv zm;H5X32Vp46e!cXNeMjqdVa9fHn*|M>%-mf*Ixa=;UfOS*ZMn3JyY@p zI(ja5kK5HA2ty+m0Sa}+u%=*xl)-~;(`uVjqP2*$D%y3mTh2&~m#hS)yX@i0Hs+0QD zj5S0mryj|%=J@N%m6=bgv|Vy#o;*nkr7;BZhn&bJiQ6Jg|K^&(iqT8(>oD)3TV}_J zfmlp#W~cXdZ_U?ZaG-JE){A=0klydW8I{Hc$a+BA^OWJ92_NNHH)dBo^>jeAmyV&p zK*Cj?hD6$+ZY7ILR^|?5j?h)VoTicfUH7tCn5%>1X}o$dX#8=oLm_=r0>gc7%fmVR zeVO--VA!7hy;=R)i*+axhP-s&AMOolR^O6L?XvuMfp3EEb0TFM+tX}@9P42y+4_0H z$>5qCqU8$JD@fb#eoIFk5?%a{cHq@*@BVjOd35q7UJf8Qh&UqaBec6IrEQAj1jg62Wf?Cl>IrR`(%i z8a^1)cS$9$uFHZT99Qk8<-3{$Bx{iFTJ%uMzeD$_zkh|~C+K@-B2|J@aq-C@^Ipcu zxr+u-c2JHds|hrlNgKd*XtYt)q7W%gmmM7MxBm3*G&*apzqCcFZ)*kjwgXCbK`!UD z2)RZKIL}H9IN19`<*0C?aw~|_)xVj;eFFjLn`SUrGQ(g#v{=jtzey~v_kBdI3=y14(QGui${w4u`xolwDG#0x5gz0 z4*{^LuCmUzq512aFZ=Ms@ouAO*5l}*xJNS2Buoeu=BRlWBxEiTu}p2lt8kw_E9Ev$#juistbuo$H$GQFJ@JHs@B?^wS{H49gns#fbjJ-VM7cfP1>AFeDS&CBa*yCw$D!wyB65L+Y<=U@_%G^Q)WhF#FK1FMz(T` zn^TNGsVf9D;Whq8V;a+nJ0t8a@7l=>aQ3m@20K;tf2ibpQzrPNoD1wvd^CF`JvGT$ zPxnaNFk(R#TrU>0D!g0(cB*76myTI?T@gt{-^BC5;2E2Na>~XFxQavHJO+x6 zbrp{+m66b~$^}FjB@=D?P&3wNkX4SZ-)8cecJbLqPBq zlgihaaD<^IV~KHYjzalP`GtKi z9obl$Qv3F}&9eQzZts1rd8om7ze#6)mk9GDJry8W6`grQlcI%=zJ;t9!Fma_4Pu6{sm?Q%OC>1sCUvO>oW3w`1;i8)#?$V+*}mnQd`l#5_|K z$e44w0oTO3i_mfOY%Ph@^}E{tSSp*N-2Yje=*%ERw`XPByRnxI>!*m#AAfaMmi0OH zZWIB3n_%oib~ir%Q~JxCVPlVj6n&UE$W(NE-80$T^wHN$${`6S^>Er#vw(+lK95X- zZt1uk(l&ymDd+Nz+4(2-ymD?m(d}k`C#!z=trS?}rtO+(r?qB&oQ~~x2e0(C-X7Mc zlTcM3VJUA{=df>t7HzKbK^J+^Oirr}e`)F=S`SPQTE8XrVwt^>SBc~fT1xB0{7wIJ zWIv1OyO9wy?QwAioW*V0gg?daFbkjHr(Xe1zWg1%1lziCS9D^}t?ern6IPMmoLh9O zV#YXAWZ|dJ9*&Y^J6?|@IA4V};s;ltY&zIVpxi&_wry?)?JKTphdIV|^kB53acQdihw+F7}CUIs@BT;5k zyD^~|m|7Y%G{&R%TdtG12E(xjW6J7XyX2RaUFo{-*YFX(JD%H)OZ5v45i-}+L^Ra=-Od2K@ZuSwU4GV?lK4OGzBfWx(5QttPjvp!H5c@qy^XCxrVRvCf3SLQ? zl(0gId)PVPF}i<~CKgIiR=Ut3>hCX&)96{Nsww)=R~7vtWx}qxj?(lgswfJAHHppa zkIuF)r0m_b;b9A&w{tYrl1t0o%nfFiaan9@7oX;Dou0_sEN$R7?PmCClVovUxvc)h zZ@d4#Pyue9&A(|QeBtk7htkT1kL5lm4Cz_9SuvwQ@<9LERNJ4VJ-*`N) z#WMNDfn&sY)WI~pOw_v6Q1B00VuAnwKD9>3?rgy6B4#-93~&ci8wCj z3~G!V4gpVj`-dXz01{ulh#o9eI6_d2GbLn9hxntkLMbFELCkp!o_wBz?LbYqAU`hV zR?Y!+9AP<8OrPLbedtF$p@38!%gF;bB3maRdYG^<^@!*z^_OT5H0C@XAu*CW!3XNR zpi}{fi=2WrnDu%%3z#(rIcC$LhEPxoV})N!g{7WZrLb_^u>pEKp$af42ki8(5Px-L zyP&ioMj6oe0t1Lo{-^^+yPwKRVe(NAHh&I;z)wK@Vgxjw0?zYkOc@pgHT4;AzxNfK zP&X=8<;^N5=pec(3#L`sd7;(p0!@(}^^%UMH$Z+3LZTsI`#&@S7c`*!0vQR1w!1c5 znCE^OD)_~xsbGCmJ}Zt629T4x{Ax-j&eGquD*=4Sw1ARTd|6CzxxbhI5oy>N&6 z@bGIc6O3WnVS`y0B1N{0kdgdtZI2R1WpkS0j2Pz)YiY63HR5l#=BJBrH1CuW&GfdA z*+d>6Hv^V&DX5m7>BvKe4j#@z?$1&q?`{n4r;JG?{`6@7sQhou1t*>=>v310gXU|azs8JhIp&)icT0%ml+V|GbStm znr=3>T#iWy{RnoAM)trG1MMzM4myQ4iO4@Z83Dy9X~zg>Nx`4MNNAZvzGDTfprFD) zAPG?q3*%R-6x5=C2D@RQQV+WfK3pwm9flasLMeGgWE4FiEQ-a!HbMEP8(S@E$iOm5 zJIo7OK3rg>3^28N?Iv`TaV!@00{9Srz>J~i5!xr%?;yAfpyQeTAU{GfLK=zlj?Kjt z(y}&X`>P4Bv2cL8wcS3QCJQ}1<92lMrz>@T9^$Y zt%Q3a=C1mRbyy>h93#4^=Y$IflObJRhM%osRDd!X7MHf2_Y;%0O=b=egb-Dp#FK`< z1WT-z!1PaK&O!PUxBOk6?V!UUewhX%Z`HTMkLuPhq`;3kcDoT{JEp!8rXB|MXl3IO zxq4gDS~1;zTJ1oL*n%h^bcaaTN+6Qtn@1?tHF4?nn6Omd1j<^r+s|q=t^!8a%A|JV z54&3lC&s``YWOoRu6rYDE+8uy(g;hgrY9s7=TqP9XoB8dv=aq_%Wr#r-| zX0KiG*hZI=*ZJk^vQY8(YRCO~VjII2uls(>k&`B7QDC--tqFTzls0N{yKoUf_Bu`K zQqZuT*}pt?psNEk7;acr?hI@IV9ikoQtS4c5! z$y9&^l}&j3^RLFyz;Y;3ms47YvvZ=zj^VxJyxaon@bkT<>8mu6 z8z5tB+iD)N+u^6{(qdm~Q?M{hmzaNpTI_P4xkcS8+`s;KtJ%8Ql&Kpd`O<7O?o#Kz zzlCGFv$v&L^=4jmw@=2hl{Lyy?^%s-_rhEu1CrrLJk7y4_hZM^24ct6ekX?N8iO{* z6yq3e>lsa(@S?GeaOkt7xVyZG9SVJ_Uw{XD-s9(`I^2u-kGCy(xS*Aqb*T$UWB;S1 ztF_C1bi5LAqBdTXuKXYh=*Q9W+~`FH8i=citdo|_CN2j7oq^h5?W_)p2W8FvifZ=i z76ISpx{pxw13#t8>C$B$o9FhY{&Pw)vHW0GiiPsWoA})jIpxGN=L`$Lfqck%eYo2Q3IEl z{~Y0g?qBZ_`6*kw;nMg2G zGFmUx%r&Jua-V9<-hTTDnB+uVhc3Eab|1T|gDS`JT7B6WkRCgq3$MFrDuC+U>Hg+K z)U}t>t9o6Ib;J94fD9{oOI$j|_A;%D11Bs?+z2`IKpL8K-CSUt7)Hsnf`Acs1)Ss@ z@G?9rt`+B+lUitO)u8B#2oWpp$|KSFTfB48SSI{ASb{T%`36)GiY|Cguk+)lb-w1P zJCEv|_|K2)MI7JG+Xqcw_v1s)T&+$wr|-p54Lwv>eXI)@)0rRe+G-X%{jRZe-!_K3 z{j0HGcE_^2-&uP10vA-a+ih-6UXOc^`<(&D7@KD~sCjkB?)LTk&tLY}x{$iuZhIq( zAZh5JtfFmX_zr?Pvv7lKA=A39wB2l8!(W`7=*q_RpSirwSCGeF?w2s8zh7>B5qv1~ zoJro7N6u90Ztt+vp4Z!4Wxw`T`acn7z4AQFST=UixpjIJbCL3jH^ab4s{Wq&;(vVJ zOoCvj8o=mNxJ|k)SoZo{ishwTt-0$P174r$rCN{UuPyzi!a#in-?BFWNSV} z1nm;fyw_Axfu@jR3;JV88F^VVos z&rExLFK3^5-CrPtrKlEGujDd+KOz@%y3ycz%o6Gt)_OfLiu_z*WvbCD*&cPmFn{>% zg-;}N&T(rEpe40_F+~8349xfbbc9S^Dv0b<3$K@$JT8k}%<; z6Y;eDjgPIo&sF)O8-GVhcs>bDXz9wWyGlw;{aXP~>naQ_5a!EXsqaHF5qTya=h1*t9$!a zboJg_NHu-^|8u+ZN4t7dL^0B*Mc!Dm=IL>QESF~2!pexd8 zKKy@$^4cZ!w(do6SxbdiF);9^e-&p2{X^Q7W#A9`SMkHY!>j=)P8k2E9V`Pg>wiPq ztx})0+!98u^~W0``0>jPhpqr}J)Moo)`XbG40VXPQ<{yOB-}jFCzI5=)w$F9aRHwo z0yQ4*EH;tc4VBydiS`Ri7*PU2fS-T=z2|w`2t_F4ddk?Hi|gL~+WY9<|(OQoz`vo)QbulY)g{@#YuF z26-^>0PhFMJfN{im)tSX!{FOVI36RQs7!aQ(@-ZmkoQ8zMgfc#u|g!e7+A33=x@%M zB1e%^zcywjk0fZ5U(Z|5B(Wv56Nu>&J}{2yBAG<_=`QI{VXwk*$qsQWhD3m3VNZ-j z;_OF!9pIqC>c^W6dX$RJRjW=Y6m_4#ZCxw)cNN732!e=J3z6qV!xEs9#WwxRl0EAuTab`7|Mocq_Hp;(w*;00t%v?gw_!)L(dxDBGMR|I{^h)>r1yKu(rbejaMO7vyoVC@l zH90+XYToo7<|5r&>6(nR)lM<17xAvuGEOnJb1R;#@7Z66i-9wHp{bQJzRX=6ydL)g z&bKG>1L>LoLR<+;DZKhOsFRhW-Pdn_4@*rY`l0O}67JULw@os)6`{4p`|F;0u91At zZMP!Fn_I!$J`Igtx6i3!7^(o14MYb2r`e|s$5wb4^d>SiS24Ksq7cwH&P{FZmCWqK zlgl*K-54nO6xZ}1JZn2IO~!LB$+4>IDsIO8e$=;=pqRb-9uX!~j~aQiF_n|2CW2w9 zqV-pIV2O1?=Tu0`U0>(t39{#$-ut?DiO0d4Qbk#M_A{xQ#=*1CWeaw#?VnL#480?d zNd)|a5c4LXPW!Dm2pzJ{2v9kbBV6AD?YVR_r{&$5e_?DwI15~Q;AM4H>8^aLA@<;5 z0HTZH@Ar|!?#$M&Dk3KnLf{O&E$BTuWnfgTIV-H9aJFiH zbU`Ul{%S6R5wo^?iDU{ekw8Jem(2g39@jnii8SHbKY6Q}Zvby=p2NfNh;p%uBg?;v$oq}lFp2b5nj zSckV<2#MCq<$3jN6c>tgQ6s>nRMjrMTVTnWI4vWi_S-9ws^3UboWA`Rq|F^TvD)tg zFgU)G>u>rF3}ch{b3 z+FnPSo9zMJWujAKel`u;=uJfUjp_r4vDz2T5zc|}C#a@bFkSp86*_G$E*oQhLzgB) z?H~oPk&8GZ-|`fX`_^y7xg@9wR|3pz+|8#4&()6q!Pq+h*V1i!ys`F+xCuk{PNvX_r7|s>fC#(|J^mK*R0XKx_i#|^iQA~rv;t#oLuiBVFj%eU20nW>4FWCPIj<%$H&=^&Ax0^`NdsO? zNz*vfH?{UBaPmcHuh`CkLaod<`G5u70uK0a30kFweYpat9gJ?C&VYWi*lGl@3Bs6$ zp#6Zd-7Ezy?)O=H=UUw;QGU*dpkNQRE&1X+%BG1z{<`cP(Kz0q9dMfv>NIT_YAnqg z_>d-hZTAPq06I14<@k56hyMfx!NkPE@ZYZoCN_ru!=b5Idm@&!74{?LHF!A~NwSxL z0itmfw0>{wnkb5dEvO5J*a7YH4JU$XyMHq0H|^7LkO8{n?P+|8xT`hicWAPj6t&pw zyX5l(Z_LEzq9s03K8~^E!`)ipdADzV;l8jbUl|NN%jRM-fmNOnpOamwXnLYd6i3ND z%GoI39AzVcvV`)9xK&8mB-{obDokBA%0jo4jTmc2aV6Tq2#={y(pp)BWvWz^<*L+H zTym%xw{TL>j897PDL~-zDFDwDLm))7f(Jl~A6hQgAix4&f;W_3C6UjEK!ct!#%EaIb`93A6IT6#y@Y1Pf9|I;?YJ^V9$9&d@R5+|` zEF-@1Oy>B6O3q+>BIo7Pd^Iw-bY-h8o`+zsToQ}$<+bMU;i2!936L&S(T-*3vgBdoLNf&xov0z7fo)3^1JzF-# zgYI=OgYp~;ILOECtSQFN<<5d&r3)J^QI_kZ@Lf0bqHLnfKRB^Ond@LcrgD~I!ZW)f z%(4iX>iz(Y$<`DyinysyA<=a@!(>1N~vZ6-1|DAa?RCLwDFay+6U2P$RZ z79K{C;bhF7LIkOrBVdObPKcw?%kFo?!y6;W83Xej?@*B+>FNZp1<|vQ5|pegs-* zKsdafT*51}Mq|PSKO_%p*tS9v%2W8q;R-X+bh}v>o`gFEgK7(WJq1{Dzr6v3vLD6L zl?B)UqoSfRQ5I6p@leUi=TBfU?y?Qy>+!GzEV0>Ath`))SiU_|PC;GolkAf=H;cp6 zVP^j1F7RCwjb|gB)vgP1ZPZb0`%X>fVmj8wrzFB`Ive3t5H{G3OS2&EOc3lJyON_# z3q_9t(@PJgqhi7?iP0#sac!PQL5fE*Y@+!HCJp8uUBoev7Uc0u55#utn;wIv_XEVW z-E6a`1lrI@ac%vj_>N1fW5n0v;Iahh)Eq+kV;*a3%uI(z$d1yic^0(suKU5&32GUB zCS8-3Y$dl@x8uybu$r*$%tuLXW}|z--b%$yJOpyMWD(-`d>Z?nla;X zM4y(_>GAV>!Hf~_KPGPMg^vm0ZC#;**(_AVIv&BP*I-U}+a3cV5U0(E~m z`h=*OX2_PhS!o;-SBs?r)n973T90SSt{jQdFI*UY4C(YB{3Atj&_`9|p1Wr^{2%uX z#MR@IGWhwowY#iH(8hl1I;h_bbnv>fZ6`5Mu zZmgX53*8-EYKh3y-b1E!c{0zvRR}vg4%Pl?TX@V~kr_wfYf~*H<{dAYb{plv_Fs4K zmtTDJ{V$iTJMY(T&dH{nE8T}yKanFd01U|=xFS<>GnWsOax?o)D%rV1`mjezgcrQG zZiP?3FJJLwaF~<6?Zq-qyG*cd{gzkplv-5nf_TeHIzZ_Uah|LWDL8aT0C4a|Ei`fQ zR?R56da3ERFG`12n@(;-j90;;YzIdenb8`#H5u12Z+Xe4Jx5f|gpXHwz&^E-k1)!R zn3Wn*>@@7-kcXY@ubxTD$=_)bm65*~1=685s;$|RS5~trJf~VF8k>>+V`QFr>q4q* zoK2CHm$i23J*$GTu`blT_u%)ve3vvq^T{`;w1w zni(qQGF4+;wgqZI4XfGMAU9fzm7;}_n>B_%-DKI|ezRI1`GD5~t8To?TII>s6%n~A zMh5$SVnObhZ#(DrlYcvucRzB1mdjKV)NjYP)d){;f=SaDXl@L%I5yq~+bf%d@*#HiK$G zZkTmIzHZ$2x&25${*w0hIz82VY%W_;_VB#PI+H{|i&-%hz*%(V6VaXWejca1>Zy8l*Uz3T$PiYcHJ%ev$7*a{UQ{BhckI9R&NWpY%ggd{ z$20Gg*p!qK3M|h%Z_xY-T(pRZzHz)@{M};<8A*EYq+}Ac!TwfCt5@z9A+RL5$4+&~ zPNj0gJ3f(4XC1iIv8|VET_Li99ojmX5;nOkWVvu@miL(xq3=EW{h(Nh<}QtErP8kM zdS^uB zp=zZ8;<34is(DDRsPvEBhb$pu?c3|D6N(gdJM4DIOZ1SVJ@zF3ved&%*uz_JaRm)% zY@gJ$-StxbgO+YJ8BJuy{+9X|?BMm)=kQduaQWdS@=3XHS+y(XIq`x~hQo|Zk%GHB zxZH0*;9DPZ@_D2^h6LaGttL^IC8BGazpx#|Gc@V+T?X*8^Un0tx#DnmiLLy^RJ4XR zOzGRP2133IEevUoIrG^LdXm5Dw?|~zOd`H>lE0v=(+(x~)(5re9eu&s>(uSKUQfG~>987k><=&nUGB4a5Xb7)d)vRd4- z@CvU&Hc0 za582lhJRdS{@3ZXvNpQnsCL0HHT5vm#bO|Kn)v|~xjW3vs;Cu!fH0C7Nt*<3iWSDOm);fS*#tbNH(&qBN@nt|LLR6#-Hz^)fu(k&MA*&J9R?JfjZvtj1m%Q^^|R7%5I0 zS-sjZd|20bs`xX+x`5GuLIFbvG(p_CmL{&SCEfysmN7wM*6)pIXOs z6C~cqz|DtQj)lkq#}-s#walVZ1B2`nmtZR#hZLYxqI%%~00sw1z_mlE6gF;t~*!aS$i$RGD#uP4->E0?j|rahu#L$hqKc)9S;K!6#QTj17Lnob=T|S zQwhgjOk29f*JKS*D}e?!7ohrn$wgQUS*TTRgEr0j{5~eSR1A(-P%a?4KP(o#&X|VZ z9onY`a=>kV#8y9YK|%o_bBGvPAQ6B9B8g3t^s{^pAB_${=fAT9`J9WRczqstu(I`6 zO^8FIMHSGoK``kL@lhO69nkq6i}_HgB8zA=QRTEjgoprA1ri}-)D)du9M%*Z6SBEL zM`dK#67YEGLed?Ed|4M16#=@4?0y-gIb>C!Cl8ycJ_M0#nqEvs4>1ATx%%*RB3E{T zv_TQq)J|ebHe5>*%b`NS1PPjFTP74-fn^D@I}3|Maysy465vP1QY_JZ=I@<>F(N(6 zCOXAoC>xMANl0@r1_?&Sinb;MHSzZnVyQ}D!hx_cEtq)XY9ixAS@B#7rK!D{OIw@ol1AFXQfXr?FkB6&pN1UYZ-%hj>>341d| zGRfyb@*=hoje*28tmS_Iskx=DvE|)vG`|S^0Oe1*1w9!ue;)-7iOyr08nP44a5c;z z{Ah?f1s{*N4D9N+*w+i_(!+`+*UD1I8y4&y23ZTBEsAN1j_`s-1|tCJuz-f7B>gw?d)?=pz6u3B{`K}se*>$e9i*?=lVw1jnVt2eZys!<6r z31*Z-$ICjUThfWiXcv+uE7pa&+36_-MzNT62RfrP>FH_QwXQR@3r%_{7oH@jvMBMK z4N(|ktw9{3CP&2GAr<1@kOT29O*?)Z`bJnw65Yt?94~rbXKcrPgFD0BNMKr-#7p6G z`oW14IM{ig|K2X0y_DhM%gp5X?r+Yo(P!iFbhz8+E}wM6@hxAwDsZ_O=Yz&o*V@3a zc<)=c=~2CXQa)T>`s(xbpU01AJFv&5jJ^y_mn^q;3065z+g@Z__8oXkuOXc{2vSE! zn9HwA5FF^^NBC;XJRvC{P==#$Lwgn{O?Ghk`$ptw4T;)3h2Cr)ge6K_-|oEV8ngk;=88WUh5CQ@4@xEg?t3pNPh5 zh6=GYjm_**YLiKubv$1B@@?l+brsybdB|08YQT*Ze?5%tAi)I6lrh3|LCKLqShNbm z5`uWjpaiqpWDF~zSg@KUE#grNBORn4f?6Uo!>;zIicWc21 zB2Xm@IIC8CRjkJ)A&Jh(4v8&enXGK2p`ro2>6+KqOhN@^{-@wk$UUDMlZu!1EQbW>LA2+wt+4^0cqju_G5f*;`6B44N zLeH<{7!j8JzRA9f7h=f9z26Jy!<5Ue#h>#3q)aVil~oPr~baDZpRj%S~O| z-6N45d-+1*ev$&0Smm2<7Xr!6C03Iudy2_7-j&kvFL$z(3RzkBz zRoJJ7hQ`%>?2X?**3oP~>|&dAth;V$nT?}25o87AQ=>C$*QaOH>Ju*2nwcq0WK`Hn zic%zL&BEn*UgLvt6rfJY8Hp0-uZI=mcG8}+ZZ>YrC&o2y#58ipG$O||y31C2t+YSg zw6FYrrgmzwo+}@2QFohmJY;cD&cD)HylNBOyYD?a!+Ln_K5ucG$mJW){Ktb2p^G4(u~n)o8>Re=3lqfhg@{?6>CsR=Uf^XR<<(8GJbvDU-)ps}Ia zP^?gUQK_P4C%4tMeZ$V4S$tbDyhdBPj-4i%m>296b-ZFf2cvyM_dc?*6kD7~yEB=s zWkRDIvBVHf8@Q)2B#Dz~L0E(`+zh1Bsy|Av;gXmUt*TpA+5ne)H|5yJ!}%LAY{TYN z4$eV{XS_FnjG@(NjqIppH;{3?$8W4p)`nI-LBhL4CA9ZtTJJsKW?(=x4Y;7S` zOJHfqzB0tq{%-~F*QGKtV!@q&&4so@yiTFT1Dpl>@heGHAw{!9I>9}Gq4E5BU|r}7#~Uz# zT0g;SlD_l^jHQ$+IpZyR5`Bi6qDPZfg$`mhc4GUxfCl3&@*u?dG;HDcZ&lIM&!aj; zLAm+X(qO2e{UrBvN+fTW2mTg0SN3Uq7Q{bVuyH6Hs8U?{&}dEb^_#1&BIrxrP^tGq z!5!}T9krpmLu%0{Oi5q;)9+oGs>q=lE;2P0C2k38vGd}+r0kj2&)eau-Tio5PfogO z%P4OpZNmTcIuMYS=V!>V#LN5+Mk%Kq;z=GEIMb_2Dx-(V?R}Ca@7t&gpHe$~bv2Zy zX#F8Pu!YNqzi(km)nE>Hsn5f}%|2k!vOeDjc)VmNtr|Ss3b;#Q@XlhJUP%?i`?SjlB_c@fDu6RleyN;ZKDB<&A#~YFjgPXj5$; z+P;I!x6`?%HrNXZPn;Cn?=Ty0ch?4P3Vo$xP0+I(GlV?IP^h zA;Q0n0S{@Z>S&NvD<#x)7X&4^#e8=XQ;mt6guk*TXxaJL5dHQJkKY0Joz zwB*#WS@YR7)#RiE_x2e&7@AMMoO*R@DbtqYa`oGtUzWt5Pmt6)kNJHMV-dLO5vce=qMr(hL@;2Qif}4Z!-U3)Bt6(v zm4O+kfLYC;L3P8&G^KLMuPlN^kVpoW@<@tit7sf0k|LGBDUL+Laj75-BoR|Vq){nQ zC}>(@fk07Y2$%>3=2RFYRqftxohi&n0m>fXh~YI0q#AM>1X3--l7hcA`79_sOLs#! z1c{}@dnKNkBx-@0$|Gn74=Upzv#ID(zz8g0k~8AJ6HyQ>xI{okw4fO~WNGR#WeXX< z*9KKVq?%Pdvk0{$x=~645?un>L6fW`MFTc!@Uh`)O@gcxP$EmgcBpDC(OO{WDSPDA zMXJu|wRyvc;kjxgTb2}3tp>i)R71lisb(0n6pN)-0@#tT??g=|06em~hK^Aoa$O&h zl5{yWyb?;r1ROlm?+0XJBnnz!>8=teVy5bQBC9G@u}x&6>0nEi>bui2Y&>p3?Jk@t zT^NfM{!fM~k*c9;q?!UvQZ433RZH9E(x>U6(q%k9sID>laI=&TNVY1H(6QUI8 z3YH4x0t^!9P+c|)wE{;Qn34$JWA5Y*Z%D3WQ`YBwYx=4{LCskhYMQ_zj!rk*$FYGX zba=cSZeP!*y^DML9#6mbnYhn(u`hXs+!@V)Ev>9_*v_JMHuzH=P7 z?BV28*vb1MmPF}LFnkT<*en7INQu*T#(D z?QQ9!2<0_$kvDLz63y2r4lTQvN6ZC^dRVv5EY%8YeS~I%3M_(4m`#jkG{PpoMEnT`U%1@XNV`9 zLoVo~av{&h?Ze0dzP$f;0>>&>c#2spLvQ@9qp)Qszl^bo^SYICx2Paa3~zm%Z_Vzh zn5Lt7YA%)-WWSb}D5jlNRHvKc>9P2)#ge!+9hM0G6uH!&2qd3Eu)DcN^$8yN6ejtU zL^u`K^%5(LyXK^mb5peMJo10Wkbm(^_#sD)iG#x1+U}^ueAG^SY#&>!_zg_|nobXE z+>wSHTS>YsYKT+wX+AGvMUU|*B*~+I_F;LL^PwWllNv2coSIrk6GzwmFxyI7#%UgE zt;pN%Sn81v^>9khTRFMtS=RS|TqxT4{QLI)@%FX-_4ii_mmDNlEWL8{*#-swIXs-) z!#k*J2qf41O+lcX&ITJEEGsRY!tZfIy@h>3E#z)l|C2H#J8U$2LtFpDFY;cX$w)Sp zf7c`QpMW90Lxgku_ZTHJ8{o^)ArG%PL|3bcVO0u$N%poWmlPsTRJ>p5`3;m}Sxozv~bL0BwS8kVQm z&+MC=iHFZgUUQjjo=v}-``Sf2cMtJ7b zRJ%`J#IM{hGJP5d8!-K%D%{iLIE;}TjZe!CnkBX$&mg=rn~CI26r3`_8zX2m!lzP? zl6DBIon|6XwZPcebq=L7o`@ge9AFEOYL&Iz!)177@`itR~WzGuUG?S443^6K2 zUJ-&siW*VacGu(X!5&~bWRhH=>Db>xb{i1FRYL;&FqwgN*6B2gnEF|JqTh=@=EYi15eN_ z@HQ?6pGk#rjD?XS!6}cxir6WrrQZtq6oCwLx5@bO$(jbI@f2j$q@M0>bT>uyI8#bX8D4ng;JQx9kQA!i1imOI4h;xc9Efo;q z5E;-iqZvU}Z*$*6_)ptVERz7?(I*f!_fj1qjB;NF%w?i=LI%}QqMw+AC-ep{!LBl4 zgrMes)fb`R4%M{-<0b>3K?Fyu>j+>lpCBi_UQhw7e!ZVSiL3#0pin%X4`F@v42(}O zlakkr<*5vR9NyJ~Ys7~+2IY7HKKd88NrnR%*ui=UGP%HBaJh|fiwrIuU7eW19+YN; zE+y$%Fdhp9C*yo!8#wUDEu&qydY6r&U75l%>#Z5iS@oQNrEwc%&_S(c+k+JAB4S4j z_^^Y|M$#WjC;1AF`XpYIX6whe`^r}el`)F+s8MAmfQ{%3p_-928j!JJGbkGcG?3sj zVjh|B?m>C4*C1@z+9D;o7=MSi`&a@qthyh$&u5W75}%b6lgW57{*JbUu51?vdBO=U z8RQ!w>MfD98LkcHfEMeX_UtQ1FEEhTFpBi;=cwixE?*J7CJ*R_Y?vfX*dCs*>ChsWHKjFUcBBTcOlZ9aJ9=R_@mj^ZmcRoJnQ0$aht}8@ zW7DM&SKPENVOiHCGHili?>b9lf!6RVkd34gZAjn=;F$0p!vr|PIFL%;#bvyTkn!fR z6TWu)+J&3*1izhO_BZDaLO}P-I)hISH$hzKM~Km;4~QUtrXA;IYyb9Y=WlI(+Ltz8 z!RuM{-%AjWkC&_m!J3=3$!i(M%OJR14625LiF~b_qn>wE93jO`bJ3Y^Cry!{3ba&< zS2RJT#4lA8luWoYJp%pj1puG?y};mKv9jk-^{wqMiuZV5pG)-M8F>~dmJXE~vO1T3Dyk%-Q0A%fmHABn%%F149rK*Ft86>#!zeA z+-eM?)tCXN%5z*&R*}n&hB+OZoJ*Nv60*zZBSTBF3szW!`f&)Eg^R7KnFSWEO_r>I z@;_aaFnV11FUeNB*2n-?UKpMzvnk$&F5>*1PxEKe6CY_Sc-wJbZ%B7Eyju3nqqxSU|jh#=U?FsfU78 z)Z&C(@-*V_M8D_JDSc1C(X~Y_=FTkUdca6|#7JR(uA*()o6c{o`dWFESL0jxdLZZ5 z_dUtsHUDI5i|a>}V*g>*;_wI6?smyR8(Z|@Fmx%3IO2GQhhBY3Tg2n?y=X^clPhT? zmX^Qaef4fX$;L->IoLWaVPs{xPWMcoYs{n|hMe!t@^IvFBq#2DejL zx>@PMLUgLbf=g_oHCpWqUrCF$$o1)=H*YW{SQC4vSch8S`l_Wh%kzb_9EmPvOOg=Tb7=z zZY5J#iHs)dBz}u1+39w?S^fygjaABCn>kP8aj9cUv{;8hHPa|S!~gQqEKsr(qioeF z(7WVUe?q2gz8%zki`YNh`w)rTsvy;>aBY47VLn-9)N0uBBT9iw_kFX->8z)l3&IUo zTa%sT5-BVFENjHF?b_+-azJ=SV#$9t^NpkVAZ;$@U&(n)!xdq}t%$xRXuP^k>11ki z&v)M!)ok|8+v%`iS9ZXCw5t_fyXi$i!`IpP$nj^?eXdNku^_{8H!18IJX&01S<^b) zOpuri#FZ4@R6)RYsfjb7xlhNH_~q_5$K7>z`?68Dsq-p*GiY`5nMXGZZ3sSHYqzP# z(e_@H)w%uo`TD5N|N2C)Y5q*bwbSEx`KY>v5V#TXC%}H=wcrW272ZfdSyG`h12()P zNiy;-79%B6(GabOYLs>mPFKr2J!KeLDy~|uqkdgqi!_Kdr|V&%*gSV=R?x{Y-8Pa`Q}FTH^l<{DcPAa6%Fg{I z;GVzJqxS3U{i6Sh%em*aXFH1;zsDijO|tvrLw~|;aq%~7Q*r=V7N*xGvETfriYzszML4Dsny|G(&zp4#ZMXC&{Sl(7Jta@dOm6vLgp_2&f6FUqrXz< zbGgb$#!RmyC0WkS)ztL4UU z2|at@ea=dsllI$n3^l(_kKa2xHa^{C-n&V?JefL`?dh275B#+b*qBMxX9zmio}iAc z&OExKl{$K!hFe8W)A>nn$kR5l@-aAVtJP3B=2lw^ljDw?Id{X}i|ujuo_OkedU+-Y z?@`F+XUjr+X={ge*PYKGhR|4<7ac*AXp;mzPQ-}BCw=xU(t~6L<<0LKF zw_RhPT}%?w+d5EVhDqcRcJySLzsanUvs}{ocZ=zk5_o?*PP?q<09&#mq>Hi!e@^cKz0OhQ<{I9i4I2<6(KYIIfkZ%&^!bz>jxxe~XysOBJ7<7JxKWe2M> zq_l9V()>W*|Kd`D!_<}rI1q0FZBtZlM{eZbefFZURaFGT3Et%}adSEwj;`2n* zgJ>pRf_mfT7B_R|SX@9ZswYL_ulb{HN^kn<&SYLsbr}M2%JRY35EYnMO_j)4YZc0N zgv-`TBZjU0{Zd8U$QC)BrwYkST{%@!r%;u&HPoh&z9ox`LS!aNPQ-=LSf5cUwD2L9 zN@AvwKmJ5bVEW-vSWv4n41j>GkVn4t7!XjQWz)b+-Voi5DJ+t%L2FPYlcgo*5?n(|JA3X`4aa|eT*MKpN84*1 zYsQ{%fZ}3nG@>1!z%{M9gft6tag010c|{9clbHl<;mQobGG->I^QSay3PRt-mJFSu z@*;yU(vA-joudL=1HSL_SPg4w*$ll!;bdP3rc{j(ZOaEjtEIc(Q;3cHwzXbW0$7U_ zpb(%Y3#$idsQrVb;@nG+w1tHgvE+1!Mg`rniJFe-LhCPjs{%1BBZ_L(B@tQ`2EqEa zg8FI*7O28zWibdXc@t1`V+C*xMv8)M1H>abDoPb6bdX3yhuSKsy%lZl)EQYnmnd>U z-!N?-lZl$>JFSQE06Z|XCDD6SjC%$T%cTBYfc!b!ON)%LnAYt%oaehjP|Xnh(uS5s zT^81?h`ZqLpo#54G3z62Le7kIRg!Qi#6R<<%iW0U;$ozg7`kwr<>@-H$8f1f<A0skBMr3DsZsu}qjP@J~ho%szg-=39*X`n5y zWk5v*FKiE9O+#384FPgga{nV7kxA%+uAbNmK-@2dXtwDTpcmv!hiWD=`)Q$yEUlqd zN!D^(rJ;)KC5d>1P>{B`tdJQ_Rv`+^*de8=D^6cwbDdvnpq4WT&uYS~HmAK74J~rT zed=9Xns0SV%4%6g`jD8Jv@S|tF|>%_&BFPOY6sXDX`+@O7o@2$y3a}vZXC}^hg26T zpbD)ULUoI*7RJt_q9F$-#jC>VNk5!pvIwAw3ezW;Uo1hB0dIwgB(KdMhTt5EDu4amS# zuxoQXIIbLkTAe$_3dXz$7~No}#k4_n%(l3T)&%5QAlh&e%YW+FxxU?wsOxvvOGmoP zw|GMp_vrE3ef4s^ADrL1*V@)c$k*ZN^S-_O%Bm`BwfBENewt8c|N1;kG7Jqv#ZyYZ z8q@XmfBk&yxn_Miz3|_UkADB6>Uf$n_xE9{gZZWI8){}pw<^c)vUdi*Qg^e1iuLvT zvRUa*~*)qTwy})?6MgolaS1?&^k$e^psdm%7eWEtb%)p=uMbY!z{4 zBQgt$x)ZCIosk9pWPQ5#{?TIXHsh2t$xzoGAC{sh$wQtyz?HEtX(BZ;n(XOJNS8qQ z%XbDoiSp-u$ed~6=iV~qGRCT5F)ym zPN|Q0ob~CEj*BQ?yJd8~Qm?2F#7OU%HGV z0(tB-l6ZPjPk@XgT{8ySsEW{v7Im#gEa5e(`q@K_H2~$vX7K4x5IHJO>Mmxnwgxvk za!!=pL3HjBPllxR2X*K_2gv-d161USka3EYp0lHSM98E(@$$=*vV0urp~=j%X1COh{7CY8Y)t}bYphN;ru`RJNEm;wlP@QKc~ zTva(CUWVvQ$Q^X6$O`TWHw+qKNj3-?VF}()M3!U4p-(yt>bSicPdG!W0gRZ=P?+GP z&Yz~fa0zmm!o@|-P<_;-Ve`09|-%a^6w$e$a0U+iC31)!q!F}=lk(h z;5o@#AxAzd9uwi>$_OCNg10V$1~b`t9;n{$%V*>-`<6qWO^`<|yIzK@fvdW9Rh_4T zKmVa$gga54?73y`V%;|b)S?()3P4{had!PZR|u2z{&)WI z`>#htQ9etNgt%CW`n0KE08DV7?dK1Ms(k|mEcAeJHhqhiw$In4Dd4O2;!D(!#-roc zBjA#`sr|R;Se;_d*88_RACQET2;QmtL!anT3cC?q#%)y|1;zVWKUkKw)7KjN+>JaC zs*@lyb)6f6`}|k1Sx=oFh;=^yz7#9v9C5F*-fd-5{C>ZusQ zW(|k?ERgTs*aAIU%bIm1&ak$PA@2n_>k>BkYjng7^Cq}7{!PM>N9LNPO`air;ntgB zuhbKfBf#s#0TEj_@L8^}#nGyu-(PY^ZW5t=gm%+n)i#*h~GyI7F8N|soVJwT(|F^EquI> zlN)=z_q%=inXf(nBC{i*Catc%JmaBr2OMJ4NrB3q`rmlIZ&#gJ+RtYbY4-Np-EX5W zc|4!a)4bl!-XG(p6ygeGO1rx~J8(*6N`zs3TYucofDbiPgGrB-yaz8cTwnu+8{pm)-!TM@a2l{>4i$ zjduDtbz&0N-M`;pv*V5UK~}m+d)=0gY^+wl^KmWN$nPq(Q*v02SCdL2cPEgB$PSXj zyC)1|T8xHn8E)J<|I9|=EZh;+aq-pTvG>5+x0IpS#V@om&ti~|Ud7^0w<^22<_nqu zXr#nA`QLp4|0e*f?-A?&@fTxc{;%M-{~M$`eaQ-`jJtfXANZ(;Xnu5}I#ZdMNod4wcmN}1i1l_0BQoL ze8SplH1_`?8`+mum3Bh{p#!0aVv8Ms-YAR%FuOfU#37S;mP zmM@qX4PSwR2HA3tv7-EDB#~wv%DEDRrCN`~Ak(NWY1VDkNxHzJsA|0+8&DF|BvKhd z#3)z;NrkL<69u8H_z*Ti%AgQ68bcFDBu~-!*-<31{R|EZ1xbrZtfopFnu#j^KC~7z zsb;K-JrHUnG;RatTF(@lVVYc%s?N-gHJF*|3!1i9bHzGAnz7+=?mJhS#ZZzOzH&Y1 z2P&8t*2F|0INntalmr`_g#H<})M6D@-oBMeQPrxPzB^zN+!C76ZV$&l2koq|H*$X5 z9?H6iS$7A!Q+bULWVv|RzWxqRX9KUhF3!&G4KI6EAI}qMr8t>rJ1bsI(vsfuG>mot z6C~k57TM~mjeG`(AxjIpK_0PUF0+l&ER@dVj^;l!4qm-YN#X=u>8ZtwzDFzEDOqT+ zveaQ^;oP8_Em~-CC&-4G5-}Jf;hvcks@K>oF@h5`DB5S@IK)m9f>63abVqb4yi6#m zxU};EVMZ79j@3niK9OzA@%2kV4Y3fGnXBuV(E#RNOCz^cDg0qBtXY=k6ux9aqw_K0 z$Lc$oC3WdUT zE^c?qIf9nFq@jVBG%_F0FDJsRC{HXdEdcV#Jbb5{19UrcNp6*F6c;bTu-mcBlGj`O|U?2sa!|H=D4wsZkUbv`8 z?alL&BGM2m69-T^+^|5=&w_#rAnI=br98Hz;Iv{5GKN&TB8~Y^v?7WzekJC6` z)AMRc%e^W=H`2_tLKwNjOQQ@Y&J)^nQ^%R;LCPh%=7M*mZemLH0WXcPEuu5dP`_hA z#A%&si#FAxT$oi`GOhMc`J@!_jVkfmFY=ov-X<2de4$hk;|p!W#T#EOLm2w!{;zSN z#`wZ0W|Fml0{@fPQK?|3DYT?t1;4piYU5GFizgpTI;v1V_EM*di~hkRNB?Zx&9Wl> ziD04=?^rNmzl%*B;`O0-v-J_}hN5p&-TH*Q?pDHu2|&;;S6dq!!nCs-0DCg%Uak}z>H{U1IT&EHfgu0-OCK5>t=*qlfneV+nuR-;qrOf4) z)OA<*R1b8Bz)y7P#)7F8BQAw#ghEe^s-;NNc&Jizsh+AiG`6eY7^sJC0(gnjB0?g! zQ>wcd+puCH;RH(t4=JeZ!Ng5^OksI0NKG6GQ4|^*^&~@^;^SqSBxDj3$2x&T^(Fd3 zWxQ%pbSZ{L4~1g9M!{s%hGe6|mR2!h5}}P*3X4g;YxMK@(IEsC3=gs@D(Ju~lkRNCVK4GMP(jI@L`=^_4$skvMoX@`X@he<7)W zaQ^}oiqXQT$(&k+{hp|VLmN@ZYs$iOf#PI?=sQjxg784Ofef;~FuG@IUNt6oSLp># zc4c$P3*=0L|HDaTiF(AS7Di_d7++daj2a?3T1}9Ypr}B7DPgXjf?)u3ZEba2pd0~d zhi~miwWI`0;ANQr4B>0X7$TnRj;ZqDfR;PRc(EM@ z)fMF>Oq7fvS7BMjRTKS}qboZW6ACS1vZnwRt5KGmMJX|W+Hym99cd~xV`CPn$l)<9 zT7*DrXs_n7!`Z^PfhohqpFnIxVl@oClj)1+y#)bIHiUwa8B)6z1Jy@A+foh0SfQ)N z+YRU$v;f9Vw0)JF-^LsoNLG+YnlPOSGR}3RN3+hWQ9Nr}de;PjWrPfsE@&NS3l5je zaAHX`DM>g%?#Wh=Ko;HGQx({<9BB!qEq9xXjSBjDiYos(F{q^O2@4B8vziE&%RpG< zu4l5KkmcSq99TY!L+K-9En)n>t$pJ6#ASF3CN~bYPh-tg^DrbRp~vT!O)Z4GP$nG| zYKWUiu+k1uFZD2XOR>PJ4pp8FFmz_T`lveNRwlJrIvc^fGeX*Js%L_PRX%dH2!%PJ z7e5wK0Xhak5?Yh(#SE~e!FOPf6eQRf0ocC!hQ`BMAa$%yG@QUb|^8Z;r2 zHVaL;AZuL;?>+!qa{DD1-0xx+l#W&I=!xfuau%qVC%IHPI6=!{Sv5E&?`+GO>wQPM z*0Dp0&Y5hpn;!p%1@VkJ`h+@q@(J*;3Vl4@T^G||dq&AaS<-A0Y1=UL7oNI1 z$UOyzEDjyYr2u+;f_po?!5UfUh6(ArN)I-=;GY^AgIDP}2FBGf+Zkl**8xs<&5Ue= zTp<`A00XXo$ASBa6?62mPWCi@CwDMjR+kRC{k;|QnVkZGxSZ83`~qcO1f#fK4en6v z6#n1-uSp9B3rTrrgj(f;3=ZKb&0jumW8PHdHYhGWU%$C|yBNMVe4h`xm`y7et-YoPHa`F-*A3~)ghc_bNf1ay6wri-EGWF)9Kx$?!3?+ z{=&;Yax11alVDbw{K?Bq826kDR#lj4WZcop?fni{n)|n+%)78w>{LbThrBT?c}RmcXyGbU5(x#<%J4x=n_i?k5t+yBGZI{;bIE$zbXX-wO;ZQHhO zo6|jQ+qSja_Oxx==Cs{^zvtfg?!6KJIdNiVRIIAXowX`z*V?&OWsE zfz2HRF|PU-rYK&2i}aXkhCD>DiBOiE*(N{{r7oL8OfNKCu=n(Yo7b_v)u89YsP7al73=A57Ee$3Za*-Y_i{hu@f%QXRXa{<@muzoOX4Wc++Ir?I0R zmXr_W8zRCAjQWaPwXwLP*G!Iq_4(7n0+h?G%B9L3oNd*G(U&vIgv*!3`*O0+mUU^~ zDmXV|<5q}+Ihk{jbD?*YlY3n)Z$59vYRdt$zKFv3tAPvt>+$V+nF zxY3a~uZ`j`XmQ&O;6O{H+zM%R|FNk=9}RxsDaaDGvi1ura_C{t9D%WICBylDw;N48 zu_`TR__%>RdxG%3ye)w_?ZOl^yh{WN;vsEQA#aR_rCJEDSWPPR5QY)%Sd2P|fuaZ> z#bCO^dQ}n6VD z%hYn8WD^}ch5jEeJ4Ki4wLYVr{fJ)5r(R+syi`*5!so1g4nj4{;?f;F4EfG5g*k`DyDiX5!9S%f+_tV)Izwm*->Dn!x7ZF^^JGZ?4&llW_9Vl{8jB&Dl1bjSwQT{|o^)f%sa@I);$((R?+L z&(b=Elo(!Ypw{uqs6Q4B=0v;{f2AMQtJMg8xjPv6BD?ZE%>6ay{dssdOz(4k<^6J>E;TeswWd;UOWj=NF^qACC znTz+ipQz9CwIBFk!t`9L*cv_QorPGKFZn^VwCpYL70YRQ!#+)U2}Ij4I=$N4^OE-E zO~@}pV1v?nl59SZW~l9B&d>O_=wUDgF3aOl7azg(W~O|h{DGVZR*q-cdO&nCkUZx$ zH(2X5FJIe1@48XU(A987!}2GaT>qNSoJIq@aV-OUhgPUr?vTMa58z4(+XgStc9QN# zJKiIx^VEjAC+B_Z^_MF76RC*a*LE%`Km3#*&U?noAI{@{kbRO2$A11hpZ>q2Df*@- zmoc?7cd;N~VrSv}&%w$@t$+FSXg0fqo=`9>-c`~jqD;op;Yj)>u?Z4rLV?HfQARf7 zc+{z|7n-2fcz*5%y_p1fphCKzb}_6iJ=2VtjxX=J530*mmGapTw1Wu3iN4Afi(xoQ zR$|FxKVrjU>n#@DBVe5$x9kLE7LVUZALUeu-4f)E-$ zmIj1e$b(1!Aq0!oy~GlZsTP(Ma$;i&&GKe%f;`PoWz_>G9`p>hO}r&wZxItE)XkP6 z6lNl&h6yk6L}sBO13+Qb3$h3nn%T(CaHPW(=$majTIUbgSjc9fj;=B!Exc0(C-l0+ z{V0AuIuxX|uqaR|A6y}Tkt9QxqNvD8U_}Xo_!$6UKn5(>e*gmpJ4zr@E@Wr**V%9z z0UGNqgdrHKQqTa7RW#90RDuCgvBIo{i;ZwLipsZ=!lp>XD4I@CsLqpzFtmb@yvRZc zdzJ0b9-JK?YE4fPiN%Ucuv5M58Dy5eU0Z^I_)Ym&91qI^Lt7eGQGBkgFbz@UwJc{v z&7y{-og_RX`62s6NuU$Knmi5BsCPc_Q@seiNDmjF2W%Amw;} zj%ea;fo-NhM&Y84XcQGB9>FmfG|l{z5EujLcl-v~NkV$}u;-|hCNuL)ixMOe2yBjk z;)DXsXbHh#wOEv96e6?Y0zyu{pH>7vDocG7csc3F;=!0bN@Aj>lq#bE<4@D=I*bse zmw7aay)6kyl}ea?0WF$j5=uuqt8!AXBV$G%0vB{CT0*DuFz2wU9e;~HMo!IO5q$zx zCe3uPa#ABp&=jq{bX^QdOjmfxdM8)!K`a_adlP5?soE$_(Y25jRG_^cPv4&@G7F1h zp?dX*dV2{gDChf9C354alAxft89a!-!~%SZJ;h>Pgo9<2237JZETM+ccpS+(j_xu_ zQT`0f;u6S9EI&Mm$qH1zJ+^z+2p9{Evepws|AJV4tm!Z#F{;!N1ccO$s5o(9(w4b;MXhh| zM1zB8=cuU(HR?KRA!hrlpz`j#RkEt2{2HXVKPWM=T5$@MtoZ((ua4mKraMu z8Tjz*r5!C$sR*7kdeLr);rm5Y^13)HOdD{^6Cy4S-;)sdXLMK`K31;VtBKq5_vh>7 z{9VVid(YdA@cu2F_>zlW`-qp*F|^s=ksMj7Q4|whcuCy)3Bf*3iHDk3)sJ!?m9O$` zE%oBba-mAq(am8ekqH4aTWkDFuSvN@!QQ+r#Y?29MDb<6B5>z+5=eQzb|-z_IGx%4 zCsn(E&b1`oxDBFE;pT_94Z?FAlIoBJFF!pXz+GzVqMm-{`yA+~w{I&|r(W`|aYg_Q zF+gJNQ&`iUpV!yx_1)y@@@2Yj8n*kbLkGzyRzJJDRV;Ast}rT#(pG`k3mPs0VldT8 ze?NZ>fBWryDp1}Q#vAmdAdQ;6Hts$b|H?Pd=~j$$_~|Nm-@Kz#KXlsnZSUfceRn=} zyKJLgvj^X&!s*QILq%pCFxAlG`%rWJb^DzAJ@D*yTSAaXiq5Wmu7g<=&1X&JK4 z0Z{%!eG)tHyf;<9do??B-Q2v!-G1vg!d}Z9l-%zh(P2#zZ4rui$xwhRM$}h7Xvcv5WQ!R9OKy{7 ze4G)Wl?W5$5~TS1NZks14l2!73K0Lh6z%#iLDNImco5YqMvzF~|oyc$+$ z**{xB`0Y7G!IUw-0%$`8nP1ousl3;Bfw2^ zIho5y#p7E!a>;Arin2!8Lm?WBj?Q$I-xmw!S?8NA+h(~95+f~*XJqlj!#akFzVmC= zw~M*X{r$T0jJz(#e@bE7v9r*s7`N%5*X`{{r=D4=e?2v^#%h~n<=rSbmdW1ULz#Su z&C2Q8AmsagezlnEbAJ#S+LFRvyv7FYHr|g#iFV901^U^uk$jTZp>!EOrcEcEyd>es ze7~@izjSXKo~jFm@1eb?$e9M=fun-Aa67U)x{gE-?~-#0a7~&S2b*@qp0E~lotksb zEp1oLHmnAx&A+_!y7ucA9Jf-)ws84h&%nrHLGT>Mf`4--yXB6@TRVWGfH&Ggo_K9u zV&G7~C^z}XFt3On)AU9PmV0&Ev-Bz1K&2b@E4@30t_-r9GqRK^|A(fLlE~i8Sul3s|VJvQ^`E(EnS4*|sD3x_zCV zK5f^9@u=Tq~%w6?TY~%Br+cL0qXG zm0-Xr6#yzO$sqQBq!x#?_kaQ_rH~{Ii(3J9A#!lzpS>bU1;~XvU%Mo*am6_j3h*;c zUUsQ~Lkdecm8#-VXAuZTUzvp;C!qA1gW7RJ~4REa74PZ?in?DglQImPn1q zPv6Qz|ChwEi=6z+P%(-ZJ|nwoz@Z9MNeM3HV+AX_TEL-(C0f1v4`*l6KaPESWqRYB z(*Uej+eRPcs%?YwmgU#UCLim~Kx?yuqzh%(4=k>ly`}5o2kz76fc2hHJ?oIqXvQ6# ziD*aUC_?0@S)?d`B!`VS=|(_MYBY59RPm?ju-^CZy7)c3{uMsz5`_yLc!=ZGu&hQx zstLKjF5y1k&>XYmwUMXE;g)Gzc7Na2KIyLk>7;Syvu}T)`m;~4t5}v6ie;%Vexlc% zD)*xZg1)2dFphLH32U!sYKg91*IY^qCSCYi8PlAAai}Sd^3^K$zJS2$f9E9sH|#3^PXR6q%Ri-M|0$fQxoM{(`V&p(4#61;o#Jjky{@uC ziBdwPtk|jmx?HH1MY|Q!Hrb}=F~9W?%7bpq{UUp|z$GzzH8a|k>CxPa?<;Fl$LeOP zBdVwOuuRB>kTf|VlCMmJ4vjlS7rH>n5#>_Tb-*n~SFQ+YNcYPpg!HTjQp@O2KPM8WhD_i3M-l)=q+vi-lB3=grKtZ*`%qzSrAhXH5(FP zuA)(h)Kd!vQ&x*jlUCYEi#xH zjts0Bk`-mggTPlm7Hke4Lv)dOd5u-RnN@dO;WKAOeNgA?8W6iZBCjkUuTwg?<&L zw1^3{S{|(OVN?7@;h8QgkWkDr6k7DOkOpF>e5HF38LZFDc@Mwm=>adgq6n3z^z9Mn z94b*A>PzTAc-l0Rk&O&RFisOIs!BQha2S}{l+YcU*E66qz%zi$`zk~(1Z9`Pgn_$* zDg4nu{5{cVf0}C|SFz=i7t7IF9Au0UwbYc)m;R7bx=O%N67|P zH{cyk(z7UK%u6xLVpLf6&jq#~lrE9vz5G|B)1x(`F{5R_ncy?^UmSXBZ4JlA424`* zGa30T#Z=ixM@O79T`i-G7dVIN@P50(>)TeVqnn>UWqxB9TUkWP#-L44xDC$vyP>@qC|yl|T&3>v=oC>(ijA zucz0u-a0>N&sJ3ZrA(qp*;QPO>X6?OOfWG zNj@g^*yu)TRaT72N^Fh3eii%G?#s*J>)Bb(-F4Tn+wR8d`s7(3uRi^kcU^m{-uhSP zm+8w4ke1}JgACSK6soi^{fLr%5pb8q!}{PW+T|uMt1^DV`Qi($RM(bs&F!4I=P7g7 zg`N5@hlJzJmxS>@B;t5d*2qU^z0u9jmI{tdsy=ww) zNE^o_PqZ;_S7e`%A-7l3zmtJOoYwI?E=Y6cb;G=nS3S{UyC|G<#B3^o=P``%Yc{me z#~aZHdkI=z5ByWz`~vWh$W&$xNICPNRNu~AnY1i9QyKLn?YHJKTkgH$mabCiO^(M! z-7>QW{GH<2-b?_il5H@K_C)KD@pW?KJkcu@RKnSIFGyXwawkezk3u?rgFD#grUpTD z{P^GsBpw-aQ!_d~0+q;XkI20y3%&Mg4hpNa7McYg=}4Osqn9Q1#%=a@Jc{{hSY50%D6+M6*t-*M2^ zBf?iCx`NBEvxou-GQkKz#-V1A5h05@@^_0mS})p!(p{)qw2i++Jm9;PXY+>*w^vgx z)1qvL>BdV`wXOvAZd!5wJzOJlPf^09wH+UO`T_`m?n$ziSC4A z$>|^?a7hI)<;2Bc^}@v$LS}&x|fC(gl=KXLMxR5-*JCr~n@5(n>o>I)HB92-$K# zM(Sb4umqBXJ4lp?^@|5e zl2kvN<%1Wyn_5*OufU7Q&$u=G#k^ti^{sTXp&OS}^a0$CYHU0y-rE{0d~X#tNjh*% zz8ShPx~>$-%IFZqPF4{R(-WNTY^_E|bg8?^qNF=@I$a?B-vu02lFw3GkFCJA>-!Lm zwz1eVt=OvFcY1_aJKp+r0Mp21h?totAsOsKDFX)^KFa)riZvOU)I=!+Rp*wXi_@dT zvzmPAxIwpEli%VCxr6Sqq_wF6$k_rQ(ay?D?Q0LFxdK)e4b#}uPV+U#6K70QJa|{MzkeL5Rabkk;alVVG>I#z~c<%D9x^z0D_?(%tsYv+dU4D z24sEFEL83_50I>M>71ZOA7L;_RVf+nt@$41p2d@S)l?@Ppe^wZe$RML znLMM``>z4}1OutHIp_xELJQLgrj;?!G(ViA2v}~CW40AJE(5oL#pJybr5aqf*M_jH zu?o}q11AkY=lhU@O1M(j@q$%!kC5s_XyJBGvYs>({PtL1A(GVW%BTY>vBO=-AuWf3 zV)@G*H$vLE`g0a%Cv5BoIan1V^)>`PO9$gzxXH^WCsTtw)`S2=Hha7hRDB4uFriAo z%rDIoI}4KJ9cv{{lGY|Kd?-50W<#Wnqc`S&b(U=gsOnb0jH;AuEOLU?2`i}4WS(#f zuq5o6W>Ou|?~QEa7t)|fZp7!jH#gx#1g9sEqO@97q7Y2P_)YJOou#r@mflO(#LOL~ z?Jly`s`Y5_7IR3m-ox%x30A^aJfRWVye5r^njnn!yFbDLiD#g`!ibl3pq7LsGyL{K z%Bk=hX}dYWov8)daq2-S6_u}nXd6`L;IyqIP69C1DWC}=u~gaZIK7JuptP-fb3!oH z1kkV>MSQ||@u)}@ZEqJ1k^21Cypi8Y;6tDb`1E+hXSIWQ^f`Jw9q)IGyL+oo_HgL( zHQU|3jvwQd{rr4i8?BZ%NmZ~)B{guV^w)+~5U0@*VyK07km|hjcwd9z;OtrC?t$OP z7$w?iJ?)`w)l9_db~fI)?5lX&psQ+x@q7>@vVvj_K2rGh`?5Fsojxxgya|1AD2a;A zvGG62FC5x?vbzfzuhKfM$h9b*dr^;mCdCr^{6aUv(6NN8qaz;bWj%JE4PdOdP1Iik zp@d1V__+lYDl*aQ`%RK3+8-;%PgDEIo;|oYWO&DNtWKF(O#4Q*9%^Hleuuf6Fc!mE z9PSWq>2TO)I?Fh~4V(T$JzMy|bYQn&^NO6O%85%$7lLmTi&w2Ph>2wxAV&x z9ykp%TI8frjKTzB1Zs~FqTX2gnD5_*e(~uXp6Bf9UY=rEfFb#XFF)U_3i#jjfbQp4 z>!*X;+^gNn^Zxag>usILg^Ovm>*3srJcn*iD)OAFnR(xjUH(`;&i9-5?P=eyN&OFb z6&o&P0GG)WwbBA%q^nAC_NiXa%j3FxsP)s%;do1^`!%2ICpUd*@OOf#xA(8Z9Gru7 zd%Bt}{8#s_FUijn5HX%q<?J2ozS~CW|7DuPddeNsHb2E!_%muO@^VwSh`h$F&xP z#p&d$c6tg{nIyZSF&-xo^@jr*?Qy2EEDiXfwgo*)RFx@BF_-1G>ipa9gIsV!ZA1Qj zOl3H1Hc>3a(Rf)dWvlATc;R9urUrZAOZBUY{pr)2nJqvWKX+o`0Q)%<8)TS~x z(I2DOs(vPHdls!I@|}bImhm!WfLgWCfdB^4TJ|1-Joy&18klX_z8}6Xu+&I6BL_Sd)MkQmWadp ztNYimIuqeXhuK0HTB?8lytPvv>P zokqGe+;K+w;Yb-jSauSfqj^^q$^n>O%+4?-&-7#>$B?OW5aN(CGFFV5dqFW>Al(<8@ubdGm2TUiv#h36zWKO?0#oXp|cM`$_Q@KP-VrFt+MtYREBCY+6N3f-LKTtb***CE4mdn)Z{s} zo2OLOoAAv~+wr>D565hp5)!8$wwuAC8rcq2pfsJf9x{-NMqBMOe>$vq-_G);dY8_c zJBi0$t(G|J0M45Qq0z^=-rD|@98V^1E>kCYGwbZpPPjioPp!2$)l0k1wEukFtsgQ= zo)=taD%-fnh++ZP`e35K@<-%)L%vcL*rz(VQiEP*_+iBwJ)ymx;(I@~Bev=BM)iqy zc*Wa(Y&BOoDAc4u0HeJ2WXd`zD!R#i;v?d+5l{%Z%y|vC#Mny}x9hQa~|C=d- zquM$3LON(Vu(wyX$a0*Tlqx7bF|Xs+5RbGj5pG*FF!|c6HhnYmQDz?5s?6)+f~Inu zGWfrL^$R5kPlY+011xL7N5=?N2W#)~+L}v599``!F5#u;2?xt;b~?Zr#-yP+i1ef$ z*qBdBC1CfNCy~~8>>6y>e7Lhpt&`0wL*x@F_fOKmIfD|o=;VcA;fD_VfcQv zh^mOx_*>6#h}Mrh3j6BO1bs$2U=N3aWaKoNnC2m&KTMFKAngyfRq5)t&Lm?I!0A|1Y%=y3MxzCPaaCZ1g> zoaVlpnBrl6ds-8>jhY+V-_8pl@1+9uCn=SgAo&Fz9tv)nO-Ma4H6PmU>>Q72}+_BJ;f!|D26#M zfTl2U5I?xuDq*LU6=UA9M2-AY8?L&;grpVef-@Sf&JKREc*?Mj#t(Xu1R4leu%bO2e01(Hx6umutk`5>{D3=hz3 z0wVc)_gJ#u$!B+d8cKv?XH=C0*Eb6){n27Tlq0dd-&s`J+0 zDNB(PNPDEXXiP&`5laK6I|Sx znd5pVYzIOYmM^hxjufPL#vm6mez8_D=wJjxj=2Qu=rGQy2hUzWPFB?=!54=p(h@=&vV3cq$2yJjSHZ(+9 zZIEv~)$ha!l=2za1b*!1$Q#UmdN0G+uNH4>z-XLlGF=~3#3-?D3=n@3<15bHoTL{o98b9ztUThXmEizI?L?vBhZ;LjnhdH-!=y@>R-eJN znr{PVWENigO`=YMtxH+CxgKGp`#)bubX(~l6{C>&G`SPN&6-xuDWofE9yTjSI zxw)yw{rvWGzN5jO=aU0-hZa7jy#1*4s;v}_LL8%!L81`B8sWugh%QY=P?TP9*3KMEzGi|m(n6R{q^?RDldCS z*H^7)QJys5n8EgZXsT%tPD2;ju2`sQrWYC)fGl~o5fVOCV{enaPK7+uE=LfXCSZJ8 z7&srBK*&5h^Ewo=wzj?6t=DyUh~`O4SrqU`>*vY9@8m# z1_|`hjBzk!T9CpoqWmeHE>Gv?nw(B2Q+v0&qe7|eC9I`nrQ_=B>x+s>&6nlx5TpI% z^LAsm#%CVX0(7&Z6oyhPDs*7t>)oRUM(x9e&RRC@Y)FYKCvD}f&G8r#DWyHR=%vYD zw|Wn+c`Ww*6q{u_5;!rMRa5seYjX!T6=TE)UYO(RK*>)=N{3;ZG?;f~Bl;wM0N zae;ebK~m)!2i9vNw9~8@L~O3AEe?3#RVW~`8DG2y=p*isKxg@YA;zcop?~QWZogd< zvQI>lrto5;;9|KT_s={6_TkR(&B6jN7`Nx`uS35?|TY#3S*{{Z6v3) zed?=S$W5$ujyltkN|>ur+x&wm;fy&pUr9w^iA5Zv2?-{WlHyV9zg@{G#ut#-jyT66 z$B@#Q%1FI+Y$YiY&x65KGp*|P354m3l#>fbV*_Qn;sh7v;`S&;0A7TN725tu!-9Q| zM)<)x-J)ZC7c}eDG&s}s42NzHBW7U3m2gpz!%W$wpVM6L1B+nBQBG}jbep=#)~D^- zBZV4jIddG8hon_fY9!)@gCGE}v;l^}vu&+ZVU*l|Y6RXniY3_0NR`(XP z-B{c7y&Sr_X!bO7vu$o^;9oCXUp$@KYWcXD)VKdiwF@KDTG#lB5NatmyEmDZBJ?@; zI+UtK*=xhM`+T2-A8kyx$vA(DetP6DzJ57P?&8+}>ec@0eoas1cfa{lOs>}zD`4RH zIui4tv3GN&zx@inO|(3;ZhMp7P`bj*zuM5^d)o&v38uH6To}t=GHXABcu>;MOn4$C zzLth4`tWPShs0M8WNeyPL(g;c_r2>+<)3x|;+B)tS+WtfF>16T7xk?+5%nY5L8p zYS?N0r^oWNiYcl}TU}9|UYNh0n3h@yoKv2T(d~;+Z<-Bm8p-cUr}Yc(7h>kDEu#TJ zFo_>+Uvs&mDp?j0nyH=uhtIvF0~o|Agr!jksT>oTw@xMoPm$ZZyyY&)37?ja;Vy1d z%GPJ7walfM1?vP2gUR6Xm@a|oA~Z6rJ=m7ZIw4D&?KClGfvxT+ZW~qF@+{m`dv25t zXJoVwc%R3~N&T*u-6L+446TPQGR{Bw!_dPN@{qNu0k=vDdY)COdgtpj?JP_ujx*!R z0X|39+F!rkS~_}qp6Q`AE~UD}+9qy;%d0PSs6w)GEW$K)WMWa}Ow#&5I2B*}7xgpj z5MqLky5}3O^~eqV0|n__TGp`F=@rwg*w0u++uX1ER6_N9Pv*A2H+$yn{NCxBJLDNA zXhC??Nh6PpE-Wws7o~l>Q}SzeZ(yu8km3hECqTV&-1RB*OR-lS_wvxnmq1-&oGWeL z4}-<)?6C>JdiZcg>txe1LO3<6o6tyMtDRFXlO!T0Y4W|Hbo-UUs2IVE>qs{3XeOD_ zA9r+wD0iQ-F&?~7n!>$s#TT#l`*y;zy}AOnb9qht$NS-u_4dbSF5H#(X<%wjtCVet z59x-j#`X~Hbn2mT*(>Y~m^l1NM5&MKx^385sgET09JJyj&XT+p``5r2(H^+3$H;(`I;(D zvd|-k{3GUX1nlkvEiOP!g@HQRemaSMRoVClIIvECL7nY9)Zu5)|{|=1# z`qet!S$=OE8+f|f3~xVt7skoIdWQ;_Lx5k!J*969T^FoyJ>4Tb~z$nZZ&oMP24<~lufe`XO&MQzH6TRLj2|uhCePLWvN*X z6&~-Awmy9#0D|$9(P#s8_^!~#sX{Gt13nuAZ^`KjDZZfl-Zcb1JM*!ks>m&D0%4^W zkd;>W2MqP*JDK3$&7S@ndYu2a0GEy7KS!(qX|mSYqA0_Xh=N)U%cAP@$&+VO6P)IH zQWOI!Rx=wz8|{!oOJuM@w#MO580}@cFqR@ud#N|n5!6zFS8wZaaEyIy!Xz4@$Z-SuyYwWItdejGVX>1JiJ5+AnrcEUX9bZ9*;( zP#r!JEE_>82mSRSWzdjO{3hWBN@9(i7zQr>Gz89}?OXxJbJT)lHG-!>O+^NZg6pk; zqy)aC;c{dX*aDCD79jrEaVcm7Z*43S!~t4KY6gmB!5V{;%TNApF=?fG7YfC#`m-#h z;m+w8S7T}g9~|29?4Ky?-NqG6+wXfCF|7I{5=xly{Kb&O3wke?M|igbMIvO~v>GLh zh8+Qb)_@55AY6kGO6AXiQY^D4|2c#xT6Jq%s2@$jO+yp-Q$98;kx(wr=$_azXt@fr zW9ul^jD|yD?hMBRO($!|B-tjSuYuuxk2!l>xX7Zj0aUdlR;lmAS?=JR`B3~emlum`}tG0XnCa+*qQWG+{>vC~iikvyidHG+o9O@*cc zYgMKon|Q`;CCQo{Q6khtTM>#(brw(|I0%iJp|Y%)pJ%1u9ULKRbx~HGmmx>0o39j! z)jrv)p}<|920>5p2B@{FxbOC20cJw&rpc7UaE$Dt$Xstcedt8|7(e#m8g-}N80D`h`C4T=%0 zl`((l70`3&`qLGKHU)oA1LJ?r%BeVf8)@l9Gl8`^6a)ADT!x_fM>ifi{|6h2$$VX% zQ?U>aKU+osz`shTyv)m>j=~uXMFFUtRdX8F4prqnUm=`Ie#{Z|@iKFKwkLxEYik&f1291}d-N*-r9y zw!fV1E_z*`!90;6p_wP)!OC5q(ofd_>@TkDb+q4JI(&0($2wA{LnHKTHZjJH6Pf22z)AL`up$m+-5FZj~1c%%!pF(Ot&R0uzGv>MyO^-JFN@ldNTFs9k!<>1&wmpyC&$0dfqrfS+tVFwy=bad zd;$I$x65J9ga6&Q{og?Se}h>6PiUE$>0g;f{~@#t(B6#HRYzqn4$BAD9|+~U^n+LZ zrX*hage>NeWeu0Sk})rl6`uQB{_*6P1{WAT}x0h7x0}%LI0}%Ok#o9OFpTc z3kIHVFPh}0<5kt5F307}KgH>e*EiPY_2pw-)75>o`X=N;M^#18j*tYCUR2b{PO|$| zMXR(x<$;AB9T7rWX|yAs&Gal@AkO$#Sz(CC1~HH+xI9b|vnHH^3;zbIxSW`qQ zv*y1SPmIZCsgM101Dp(y!%Z`72pCgvjTtFTOdJPzl6u{TRFGpN<0tlCBzH* zvzKB-Vu_Hk74ZB@!4E;tt%)N1DQ0r`61=+vn@ub-M4JJY-y0lDEk}IY?_Hv7%Zx!o zvYCLf9IZ8W{ggu-_&=i;q}>2)8seS6KOqI+7Fyt(5+vM7qm+M@O~wH=cT^VQHgGBi z@(*-*X&O;f8sZiE3>&sg;p0>sOUvj_u|bhyKY>_)Wc|u&1NCkte9K6hvi^oop&pAm@?Q z2!Z>hBWO(gqRk^}@FOV{1>OS9W-yGk##1KUJ1TRXGA?8|QfGOViH6WFcP6yyV9VJy zMnOdhcke8f2bk#QB>0*vRKQ+TB?({?A#Eh!;`0s~(BY4;!nC3g{n>Ki>@d-3O3bjU z^~ZIZrjt?y)F!f=&|NB~{ZdABqgjPKM+r8V=uJ~owU87}CcA7V(>7_+PP2_+lBPSY ze{>QEXIWTm;X2tivT$%ML-3M}iCkxD7^FtcPN>@$S?LJab0V_DtRaR>0+{IW8^U`j zj4+jpk2D~D0wqz}Fpep>ktNtf;^2;^(Xj@@jiu4EYREF7a5Bp6!WPk=^o{=lciD~p zvkzlW^aY~qfxMsDmpLlp*EX0pN0VCM7broe+N*#7N(Pz)IxVVaOz8_`72|ZkI1&jS z=oq)0gc8PN6~hFMZjivJ!7L%K?E(72ywZoAK8~h$Z=3*QU+@8{?cto~n%@+?7;{Wi z!&}pwNICY+) zwJ(z;mcBE54@8+@Ed31qxi3@GH_J4ugaY_pFKKlu%`2)uK%6Nl!}=G`;`YFP{BrVz z`hm*9gme5d@HOkFwa$)fzN%sglaf?{W3+Aljo2eTMQ8XjNN{Q)Qr?YOGq%F+v8!PD z`w)XVof8Sp1|rQy5;$-o;+V<;knoCu7&&*|F~;?(xdL_4syRbI6n%>CS$Xlk`OGti zPGysl|7=lo5JXi1;%LNy$Ssk-gkTXxf`i8{(ErZ|vJWwc7*ZS|h5$#9BftSn5H0`* z>ZQ0?RpubxAw|tMk0;a6(%aJ2a({|?zxW|@+1~b>yf*o7Y>p2WYv+_P)A3 zU!AAPOJ*xDBl=GZtO+_b^^v6?^F*w6%Fi^Gk^O51yuzGTJ|#8eO%8cxe~)^1V`4L*0Yt zZG2y~?Bo3OH@gN!h8w}zbrltZU85;F7afOR16SX`pq7jKZCHB!?K_2k(^s#vtIOqO z=SbZh4&ckgr83hmaBs%FFVuV&_*V1vxnVz?+x=yjC=5|(_njw4nQnPGZoTc}{ zMI0bkkH53dEui)tgeS`{By{Yu1*%M4MFD&?;jN)O-3eqSTw2|?m3(Gw$@K94>O#s` zJ?G_fEyv5}*-KpF2`fT}x*dCWq6vFFGj)g_QA10Cj-{50n@t?M* z>y0kgM<}5Xa56`1w4?!B9UY{We&O1rZY2==9$qdl*K^`7`}>t8@xkznO-wDwa%J~+ z`=Hd++NO>qyhVvvt0HmMxk9W{#pwGoF;5j@53w7-j%K>GX?1cNTNsKc5)ZY9+)dWW zu?RmojvNOLO^LIcEHq_Jofp?Y*IN@IO&8km>5=DU0-lS+6kL&&c&c;Y!`5arLM=X= zjBIqEzd%*VQ1GtQ<+0tsAfEz?rda3dz>g+p`8>@gWY0ypWs@2*u25HEI{0SG4i~50 z`}P*sDv|Cc&?;-w|(rG<=nV+5v(iR!cX@hcgAsNjAlnqhR|P7MZWFT*Qsn_oN8c*SHxgz$Sz&+siog5-f~UdjgCI&V;*A{ zOC2=RKio{`X8*pxD3gV^jQMA$8gs#ygF|`U(_>pJ=jnRg;=MIEy7ZY`7}u>vG`R$1 zvkNoO-yg|RnW@I^VMR_%W53;!1+D{>q9GwSJ)G_JYLLoQaM6^=^*A#hoL-L(FJKzi zFQehDA10b$+)MHzjmIc!QX6#f*J3caxXdgn(YP=H?ItHj3BYEIeB9x6ZtnS+%poh8 zbvg`6Z7C5mlbFI+!GVDE3@b5~$Dfk)>+q~*z=Ob;IspRopbxg;p2I#iI z9WyckFZT&V!@GKLy*g5V63tQTW8v#5_WqY|^Im*?<0UX+-+FayUF z53#x>-S=I+f4x-eZ*IF~$ZR^PdB!aahAMfDC!XVobyU@=V~{d4M>!P+T%(AIosU+? z#}acg-8+@{kE_CM^WC4}h+i^G^ep@D3~(^Do1JbqupUxn2xw4RQ)gu1_!8KQubGy_j4Yo^aV>fNv)Ujh-jwFxX zJuYD@p=Z_4ug=_%N}r6Gt_eU!aU_}FayM=lPt2vxFfe1mTs|@A5Ka7>=$eZsYj(2E zGMJi?r&XiPgWZ0tch&ObWew>h0;;wl4Cg2KFX;{0y@t=sqpXUA~CtVC;rcLGC=PQQh*tul^I zr-Q%U>L_ul&iYAN%vQb0<11PfJzh$m)#GHX!@s^Ti>W7AMjaOT6Y=d&9N~c(sK@e4 zHesupJgD6C!xX~79vDZs1iEN~+HebXuyrwOT44SLM_W#kKAv$wi3KOuHl{)`Mem0)9x~wp;jH zT)LC9UcqWI@ME{o;r)!t1pEUaFE6Mg z(jJh8exc3sVi_J;%fi;)wz=UG4FH}<#{xp@80*}SiCzpD`=Qq+<`cUprI5oQu(cns zxJ@HcTDu0v>R_4f7i-0{7c7g^HmAkG8O~?_AP+@AyCeU*Y0-bj?Zd?SKUKDWew37;5wv@+2dLbg69L$z5>%FMksl9M=2M*y;5nNbLoG$T9K10eue z|HWfD7=Wn)ilv$jb4KKDMDnSk0;;hj-Q;&_rVFe8Qsk7Mg7bBe87zvmVj^g<2`E?z z1=wC;maPE1h$f*^&?*X1Axnf=D6>_el^X}L%;b~=ZJk-@u8hs9;BOK@%0Yw6b+*{IpU;bh4k*%t&q5;8=2< zUtcr&h@xR8`l6bMb=IzqmWsh|g^a2KpsIB|^t=Z%JD%6xAtQ}?Tq=wd+WP<()BlgL zw+xP>S++%OF*7qWSPT|3Go!^USa6VQnySjowazI>eC29mNPYF}v#?1P)C7}xPaHGxhT4Ypt}5{V8qU!iG^Xcs zZ6dU=94tbfNFVM;dMs62dVQ1TVo#-PliJ9fZkrjx$!rt6^xVZs7&BCd!y0~N z{lf%8aTgaRut6uSFtdY;IA%Ts)s2b3xR@H7h+^g$f{H>GKeF+YY#RcTNRta1DhVH0 z6^2>E?Ng>ibXdGr$}j#;Um@hw;UoZD{0fE0xnQ{3EwpMGb+}Ll&@(c2sKROVRo-oR z4)h}qAnzwNvxmF5kbZR+_pSE$s1WlPK(WeNTX;4xUiA);9%wAI?4NH{YH?=UYNg5_!$JJ-0hIfkw)cyek%PW=h(HHc9#m zfPl!_X~85xLDUerE>|gdzoXYR*Kymq8dhdR_wS#t>?vMG$FH3QO;;pKdC_f|9MP`55;O(@dL`E6Ao!x_#CIYd7PMoBa|jd);(L<#;?} z-8FB-PI%4R#hQU_p8on$boI;VOkVEudZ_bpj+Vbfy_*p4L(?>)`=Y8bW!@$WdA=f* zBCD<_5l^Jypl)$*J-Ou;kxPxebZ`zz&aTZ`Ju=miau2fh8+xR%pMK@8s;O(00%l_! z`DBWjfQ!O74>@+bSHJds(UWz^WY)idkL{in^Px$(e% zAeh!7QzqE~qv&gy;n0~+6~vUoFRdN zIPGHV%=&9t<*)|GFJ2|6{sJGNMm*&MX;82Nb@2W@z*wHltNUag%O>1ykf5w{zGRD5 z;a&x@_n*WJ`Kz0%X-fXQ_*&VP>0|myxe~5Ps!k|xp|oZc>p0G;OYzCw$i?{eoil@L zp+~R%9A*t1rERP`;_p2laqWF^_zKR;$O52jRy!=+SEGgNJEt!NeLfEx<2+MN{ech7 ze_g{0%5*P|udTLvUSA;5*WEKQUG9u(`f9j@*=M)>-^Zr{ZuV2AiX{ccYe&QeBaYv1 zwuJr6IYue1t`k>F#Gi-z-=F5RKLW;B1N^RrS>Fi)O>gd{C+&Q5cPBZ!h8MD07o{(D z4vqcq?(YpBZ|_c>oVNPj=msy%B(}o-zMgurZiQB~@2;^L^*voI_QhO{XO3dz9^&gC zt457{oztOsCHeLCL!z+X`27iV4!Id&ye&?U3p;c^zJ$u_t=;&5@$#1T_U_{sC=9e= z++|ea651@Z?H+zwuYwuNb$kIb$b{Hv*biu56 zkUQVxBsM|OPdp45CXiDTB`-C zzr+-#Ae+bC7=)QYpFig0Fk!a#M+LVbM=ABgjGH9;#fd_Y3+F@eNOgl6S zLT95{f_n02wlfAKQq4>t-B3ZX;;@H58DChgcscPB#$QaK8}L^KoH$Uc=$i5eRQ?aT zGqzMb7`>iI6Ys)eAA|k0vYu^2HLR2LDj9rV)WKfmuUc{?_X1yI@rgdZfQkP?znJ%r zLXw zu&nfTb3aLwIHBKnq)N88iRWHdn@$(N0Z(K_c^KaDJFZ#bhWm;Q1t;H_bG6v8X z+QEZiFnlMX?HT2qdSTz>MA1{8PrIwd?n+fqtO5YNfZ3V zT(f)#3=fn>Y7b#v$c;{vlNe=O*^D-XS4tZhO&)$EX|0mr(ZJ&Tk!f-rn6>5(=X@tx zEl?~ro^(7mRv!vBOV_MxmW3P)P*$5HANS8lFt%DBdV)KD0_)uCi*y?Y=pkOo>k4ED zI}Q0-f5EEgYP4aTb5PsW&k6c*@;<9@ABbgt5mob|wuF%S)?&g+bnjv!T=0lq-~CH^ zu}68jqxPZzqBp?M4gR{gD{yS&F43LTg+$tKBk4u>Gt4JGn^Dlen!)}jq9EXa?EmuY zuyJtxTMgfF$2_oxuNRV*(JzMkb%DBSIc(_YMC()uY_+gzI=(Q;plaDt3M~NyMx)R} zh@oAxQ<*i{1NT9J)Y3`B4sD=Vx1xQPz z$O^<$YPj5XZP}1=30Q16I=6pY%$U3D)$?)NSnIiaA~7P|$KVi(wXe zS*S&RF_h0hq#^Jrd=6?7hYM0AE*6zVq0bcFPDDOv6JeSs5sw=hDr5e_O&|Abnf+@R zHN;6ZLYyLyi^_~~8*6kqx+`4bGi8%_8xf5&9gM4fA|wPi8<$S;Zw$1ReletFF+e#n zUl+UUCtU;lLd{TVY34FI5@Kkxac2H+_MMWjv5NX`KbH|Yj=5fCvNgbG4VwD|9 zQQ)QCFI1ys#^AI%+;K*Vzjvt^|{$Nh749;A4i(!{_L)Pk}IxA0Uv|zPrwJphh z2ivs*99fogp;SaoTkl(KTJEWIY{gM)LamZ)O2^}jSQh#gV~)(+lrw2b>YeB9l-ORf zsKC*EoMxnlzhH@FV|qv1k!19GVhp5f@m8$?NNCfPSG24)lF2DJcBOTO4Oo=5IdE*a z*b<)&N>S<00d}Elw+n;>pYIh33E6V(55tQ{9XYpv_&P}tiKXk>>D06~6(dODxnQR*Vx zqt47BE>HWRwpC67PeIsJUVhuH7K5i-ZlCbSJ_%ywA!w|f65raK>ohn$;N~QzzAwP{ z6(R>X%RB@h<2nC!bLpv^UG7&{Zjwx5KYJPYesv5qroBG6L z7`G!Sy%6Q2Lu)85hYs=JHz;bq8wWk@3yPJny1D&GkC!8W^Gv&h;_=K+@s%;x&U}}C z+$S+1^f8RRjNahz)zGGQsJJxsj&2&%lv}Ir(#a|b)s%zxZ%XBqmaR!8c&?@6mF8n; zz8$MQoQ(fYw#f$gYY>;d5kk-YNBg9?Mqxo-P*V73N1*hDnngT%I)1yE4dKHu$1Hov zhFWFH4p9|Tii_1ApVT>5=8ni0H007#Y`uC3@s7<18U~H7RHe?eS@Bq3$j&^LH7|jD z^bGt~j$cHS340?V-YW>*Z9|T5f}3cSOV-^S^^vR4Yb=XRWUG#SF?GLWt_)NMGS|P* z@WfJy6x`hj^=vXWa2%hc1(?2Ex}vzZ88zYGz@#^LQY zVbg!x()wn4DuE>P*;}$j2n00`J#)|0d}6E2Hi?ZLp9eYo{Z|qcfiLpR=iZR7!{yJL zoX(Et?xC*Yus7ndFA%a-@}op%x|V0u(XM9kLzyMcXk-R$#X>?(&^D&>0A)`My81}l z$^>s`(Ux9(maZ{DAg8tlrw0nb?uuQRS()FbRwzMl)j)58x45B$ZQMZd59vG=S3 zKD(Rx3lqmZ#(pQ;u-U{FFI)qYzA9;AH@UjLZKd+Kg{X#UA{JD-&gqZ);+k3Y30Fz# zZdhLyj!PIpAUh8#6shU@soB<%#l<()o{8le=>wX?J&PeCu=0Yrsa1+m?R5v}_@5EG za>n9csjjpACmi_=QsdO3gq-d7>GGfC(}~3T?xyKi3Eo20Y|0KWQVnI*^ieG#G;~uo>CdiR=P!G zdrS+_$8})znAy{V7w1_Z0WX`9h0Yk?plE#ZASp0=!(-7a(KO=77lqQx>Q?(|l~YYm%5!|a0;W{s;+A+d2mWOul#N?fDMaB!t@kt@{c zx7#`f_o~AfgXLy5n`K1ojL3r)t93?1PTxJzt=9*|!fT8$!a3e?LYTCMw!{`bH;|-M5AZKa zN?4Z`_lr@=OF0*4U76N?YEHys{F}|mF9<7JLODi|Mj1CbL?uO7}s}Ht13;M zv?L%7qx!e{lsx%0`s7pQCrWpEXtwZawOJW8k5qTD>B8D1Dh=1s9ez#ey#nsXgY-hS)ii7f zW!-PP?PzE;8PG5BShB_9V8~#NS&_DDJV^|;ntbw@j0&An_rtVBc(2b(@2%jn9CCShzH8LuL zzo?+e4#J_!&H$mRQTVyPmL|tDqveSFa=I z`@HZIL>CZZM|NrueY;G>_IWK-r{_d1BjzzYD_lnOyoIG^%6}KF{Z4u^Y}t*ua+e## zbJ9`UG4K5K!Hw@Bylzx-c71{7?t+9<`KJK6HC3664`zt%DKTaB4yp01; z;e$w2S%OspRpPgJiT;=0y&pv@Ma_3Ci{09n8i?t)m{!h;(`Y=c+!=)+uLj+nhB8D# zN_In)V+Uz-Lf?GdW9uVvfD$O?jeg{J5s~+_7Yciw_-y%*3Ciqp);Pb{mUtY-EVl5} z=detrfo9qUYyf*1mx2vnvn}YrsJO%U?>ar+kLM z%W>KQ(%ZrU;l3;S`lqT7IG371q$L%F2|HmUyt%P>Y(_ySb-yV*KH`M+>N#+Ga z<}CSh(~S4`%fQ#$-4BB~*pIhu)XTt=z+#UlvF@&+nflBbuDZ79^Iw{NkE66xPDUL| z1wwD&4Wt|G+z%Mi2-IBHgnqB9y{zuO<3Rt9(dK%mTc^#yNLKoK4mdLyH&wEoXnc4H zyqCm)MfPrsOIZCO)VDJ`&e$AU+qdry6+{=RLh}nE zS>nu_n!avO$y($k^5TFA(KbyPzn{ph{LuJs3{-6y;&F#$y9`tw0Xcd|u8Bj}qb}ei zgPH*AcG-LAp*C%^&7slHpuB6Zm8+7i;yR~?xb9vWzCX?#_(6KnJ3OTc=H3K!SQzHAl!8SM#(<#5v2e~z;ZM{4`3ViSR1DS~5 z^n*WwiMrwQUwpP(VtLh453L;oqu8T#h~x55r&_1pphu{V=xFop3MO`Mt=Gjznv2P? zzv?55<1?UUIi`6ZFq*7iI0fYMF?&zef%~MSA12p$u|H$h0XeP<=(ZZEF}{ z^|fq&p~Rkaz1Ti~&&~SL{*q#evT-q$#pls2Y$aQ;z+5-lu|Z1hEo9yn+As*8&a%6o zBG9d0fBStrdspE3Y;GgThI|TClOH1B-YrbwB1Ba$KC5D*-1W3)MwFZ?INapw-^z4;QXkS83_-XB)bLT@57 zLu0F-V(yl1pOS2yVe&BWdfzn1g|atr@1R%K zoKHM5eu2!cUv6pF(|N9N;iz_dbR&@hvZ?>)YjzPm|0T1$fgEl_@@LjSOVxKSa*|iz zkZ-*!Hph^5d&b%Gf!6BJH9O0yz3Y%?H|Ck^_n51%_>G#Ukh|EHh;7HHZ9H&NVJ7SE zEh6Qrie^10_A`Bdcf8=|ij(Xo#3_?)H0JQ?CG@Y49m9HvYRp(s_xdSgpIc1nwU{i7 znJk)g#x`5on`4L0Eb3I`z}^3ExGiTeyEa7`3+4T|iWQXMfn4cdhPrp$q@=@_IFqaz zoGt*)IJu9_=;i2;`dZM})31*RI7W0fd?o8;3E2&7N6%c7S5Vl##PKNBJWlkWTvX)z}k@4pKNj@MDOBfnw4 z4KS-=P=5}`4Tgkr{)B32X=R=S6`qt~0yRkySU{;Zn4I;mmc>Xem#U?i)@!WM>7mSu zTA;+?!c>qfp@cp7y$)r`VvAGz1g8aA@tcA(^FT^^Tfv7FT|qH#OR6P_NVHL@P06_nTQa6(~D+F<;` z%wh?DA6aRMtcb!9Ow-l)1qX)S+F&ACOJd`T{7(Tz*vTXF?$6fTFnssKhYb}8{^NX1 zicDr(QEn^Ka}CU@6PU3+#B_Lz4JDGpc@6HcXDJvzw(?2S$( z8pbAm$mMr5>8{u{6{y*8t^r71bbwqYiI?!kwlUif$MNT&Uw|eL6^{CT6S(#yUB`D7 zK@L-C?g_19re5C|8)rj88k(QwggML^k;{?ni3ym9wQIFYcX9MFk2`=a>GAr2pjqd* z1}5V6KeGMLC+BOI=b zsQSr9f(YMPBli|C8lj&LY@Na^>5FUsqIEW`Zp}D$Qq-2Q?s7XLLsG2TS*l7%uYnsk z>zx1OPtYov)n+M|Grle?AgEl@)~*wSLQuw6l2hNQ*C{4oS2s8}z9bJ2j9V7&+cq1& zbw3YzD>+N)xc}q1=t-DTvYb$Xrk&bS+cQil9CsqlX{*gC$FBB`G;YlMz|&@aA*d0` zjmeIgqwEm;Bg_FzE-2;h^OPNPgmBeTwf2|7m{rve2fb!RnE7hZg48j9Kszm4)p&Dg zkM4e#K6QcmQm`c>w<$x4C)4kT6i?S{JLi~lDH#jFzS}>>Ulk+OXZ^YyH!vU!GB)(E( zJ@Gzxut~+WxXz~cW_Aq_H9azBx3@bp}}B&M;EZ2G43 z&K@#0u#O=ONmS7UK6BqevP+oP>b!-|laEcta$Y1?D$Yr1y|Q(Mq4mR`)%KX?zV5;8 zx%DchC=>W2jr(NW>$yrHi4ys!qWC%8D_NwpsegRZMAuyEq&Lg6piLFt)UI)<Z+vfg#>JhfgXLRW$lfR~(F} zrOxCC%eV#Ih7A53UNrUdq6*h4&v;~5s{{9zE+tlD)^m(*%*KAbSz~&9D9eKR$?o|J z@wTN{%dmFQQK5xAdhmOVv1a9el7#V*F)x%)3PvH}d(?p8-|@b9s2YsnmVZB>4&>-3 zW%H3L z;diur$G-Q~{rk1V3V@=(hTmJu>ABHJ<%i;DGmowp51^sfgXo%XZu7|6h$|18 zuB~tZr*rb|W@V2yJ^&>~rYa!A{Ab4{Yjb}FJU(Epj6WNOYr@j%)!T4|L8+FGWiFuIz znE_&x`k=uz(HRt4BMdh5B6i6TmK-s{MZ3-Pvr5MA+0CBx9A^l;8!em|4gP6j;RgG!j=W)<{al^7+q#o7-qFxo1smh9rOQn4n6AW`n`rvDb znsp~KgCujG7QMMHnJ6TeDO6Z1-e93otm1H?DWptBLa;gJGY8uX{a^%)U>Z;ZRYHFGkPwg0ZwV|cANRC5j zc)en=!TKkJRAHlZw@$S&$knx-kL}f`djXwLlQTt4ot%+r0A78ywqy_!eNIhii*H94 zhbCIgacnlsu4#FagtF}HP7rJsCm~sSG7hOvBA^H0g`h8=_~M{vGNrp%n66>veq3E% z%i`+BVKKfUHuWs2n_K0qo7>5-imD#wq<$!Z0UEE-&fvN9vmX5Zu)DuV1J`2A(%#!|{&efr`SH56B^>yEpD-+J+G7nVHfCfei>mb z{Qh1$-Y)!B&My5rJGj{QcJR`D$FORACnc?Xi|1GK5%=eP?j>Q$sRp!lzTAGk`2=+# zTS>f-bQG-|6?L3dNOIv}kfEvNeqc-(*lvOpy1_JstsPJ2#7$q713Iqy*J(E3If%^;UT%S;xqOeJCdLdmK&8aH)6JkLN0;i=Nn1UDtGb)UkT4@zOITb~1_0 zz?@3&TH7t9)?Le@I>($Xh0hx_wFu=5+LWhy_b~FV z$9Vn`&E$r?obh=;fJi6v`7G#~s4TZ)9u}v!R4jVK??lI58IQK=Eo*NSZ-Wpj)|d^slv+0ZY{#bVv!1oir>XYGKlnCko83{P^F z%-BJo+SuRY(<(+80>e+-#kj5Lq^;-&)KHmrB~8Rn0fhUlC@%RkKBT4IN}s7o*c=&@ zyA~t{)&hmeZas@Nj67Cf8Gn9KxjokTR|D;TLVeE8&i;R+U|gL4M)MOK1)Bsfwf(Sr z2P#O_goFP4K!+41`Wa)m6-#txjy~v2MEM;h;3ZW?wq!#=na7HSG;)(BhElVUi>uc_ z{o5h&5?0K3BP?GxmP>-%_q`a2Jv!~EWoLVgKl$b8YBhW5CvvGSWu3p0ReNj5Ww8tv z7&^Ke_ZIg;mQv;5Vm3!vLM1RPLp8g8ZlTE{YTzc{YY~buuk|3Naw4&ON5YT_jb02I zQk*52W|v<=ww8?HDoiWK4$_h)nAV&24PGpjz21~0Z4Uih#3?J(g(p)_gIlsx6WU-s z!cu-lJpl&|sCO+bwZS$)#Nfu&je#!Qr^1GqZYnRT($Tp95)3mas(sP}F_BMab4Mx0 z0ZtZnl1bee+rC;aqm89wcu+}7{-y{aO2#RXrF}+4Whg$cq^)9n$){;DJ zh~0F0{QyqcaTig&%eCni9UNUd=%dwymJ=5h2D3ERX_}bf3A7}1OUd|E^C%YD*_u&{ z*)BZt&JT6e6^q3LHkMtAcdZ z#$+J%R2j_DQ>zul+RLg({XK_}hhYF<+OYQTFn3YPs}|&Gd_U zT3RL>d92{iox9{&<%(cYyHliFeJ^iI2~MN| zFJOw)=d~r_z}KY=<4OBOOY;hBlTN8rZ3l%+bS@IrK!OCia{MxO%6xqP?D)#sSZ1oza0j?UQcyX z_rG1y=9bNVl#TRm1>99Uycj-R8E$Qta_Mz6vy%qA{mFPKK&WWiolKbPTe^8NP}7@n z$T~$7sIrmQO7l;D9saR5$ibNH(RPi$gWjo@uglG{aLq{(KgLVZo|WU!ajt9dcFjq< zDFo}*%-TNf=<4cR>EE;uVkvQvmAX@q+G~Y=E6uQw_|tJS%x){s4ycQWG*1yJo&dq7ZF&MsF_yN3jH*2nM|Nhl& z4?C^bsA;^?FbVxh9Y1XbV#Qn|;cFmWiKBlkHJr1gUDlnzV{U9$S`)ygdBl3+Xl7$S z5BV7BD$yW-VzmS7(MBS7(-}?~GsC`P-^QS^>_FG|f501AQGovA;%wuQzo_wn9QbT; zIMuRJ6T^AJ>8b|FQFi6E_2O@9r#I};UxB9VBaw%(@!T#zmvAqcI`(FJgXnV`3BM`_ z7Ud_YHT5rHhtA!>T>oqNOIJ5<>OHga085FRtdtu~36T`y3{?pc*mkCpeL^%qmY7}E zaoFW_sz-F0X`*UA2mi{5%_4t}muCM{Q;;2U+3xQIR9b)?*7 zEp@kAYMrX`C>=+G%)9Unb3-r;h6pbx@wzdeMBPi%$JOrLKB$cB<%Mnc@x@WYrRou zzOwOL1teah=m#1*lv@$H`QqpqL*+VY&lnAH_s*UZ10+jtNBh=5Fn#9Sf2&r|LP+L$ zSJuPPeu3c^Qqx`1ktfGttb7I>w_9$QbkD-k4qBAB1I`0p{71xXBRJ>m{Z^4Z8O;M@ zn)(I#!t7l)y*)P_rk}@7*7qFDn?RvfUA>1LkrFR`DI2ca^7-QThqeTVTofhQC;vQP zP@Zob`EWm+qko(K%cVexrP^HXqW$iYWA|2sK&i(q=Il_#hG)CjPHIGiQ>6L`H)MXN z0N6oVQ|*53Nu%7X`A_$Ce<{>9AM(x@#rwEn=R~c5)Y2hUz!``%%3W&e{KI!TCQeFzf%2?xEj{5qkZA!uzCOhLHHL z=9T}Mh64Nl5?!!!^RfS%5Dr*((x4q3`Wj!?Ijc5&iedH(l8iG3EeeGR72fC2pLp`S zJv415ai0iv_tl%m685^!h_nn{=#;lEXx0$B*MC>5*V1~&(9^aJWru$7iz~r78K^Me zT^6g%Jnn_b4dGglVN$>YY4qOgxErC0qGe^hnz_uIRe}mBQhClS3{k?H>tbkXdU6#S znXs~c$u&BsL-ATAN>bzO8lch8?HiyoM{`U{>#CeshI|ua#RbUFp_kffCp(W)lf##u zXa`A&E5Ur6;7x@yQPo<-u#n;L&=V3S6ogF- z!Kx)@~|@jO$W;(`CZw z*T5WwLD%9EokxK8%19fu^iOtJ`~*)R1@B_2h7l-lyQOiXkXAbz6$%JP_C=T4-ex+$ z{4EoW9^6?8f(vA{<)A37u7*s4lbXS$kWHzzWTlXtMpJ0fZAy>-`CP-(5=Ofo^A`0b zGd+0^ttbG^!Cu5nk?6~ApeA^Jj{9vMZOryWPeLvcx-}Y0Hn7@auo}{q*x8mC3*%mi ztikD?3XP7Ms7LNwViyk-=I<>roW$&$N@@c}L+U(}WEY*7Pbu?4m8NKUO+4SfYfVvp z=BuGjk~NSCYaCsyX+Tl~{Lo9z(}_sB&}GCeNjK+W_|3-`>5kV*1q)Bv)+!@qn5dwn zwE|a~iXg?DWB{N7=Xedk4NoxrDzu$6m6c*1)#cWxkzg^E4d0J$RULs#mVmI8b!I_~ zDn5&@jMr21n}uFU-A)ArrJh;xHc3>eeutOYfWBpvz3%V`7W)T*zLqeg6Cp+Jlb%O0 ze~&hM4OAgE{WRA^UaOMZFl!-oBA$}#qW2$(wqS4}3%mZjO3@6QeZyFc(zn(GwqoKI z1~l74S*4|=#gxGxL<}slB(Aj`RCx(zK#Md|M#uDv;l>?Hc&ShW2NR+@6U#A{^#C$B)kjdxTOYcJ+OM9c!^InW753AEL|iWEV4@`9UwlntP6%e~dc>vd}3roRwt{8F2>&M3g|?)t^a zvEFDs@a5v}t^U&S<7q}ZZ)Hhx?P*^$Ha8@I;@}CLzDPbQPp(AZL1&Zn{eD3hCED*E zxYgSJ9xAygZ~cycQWVWwdVFW!QJZ$1k#RZhZgFue-YYZ6uftk8fjDCnC270 zE7#f{e(w^Z=!(@69DE%`;h6M~V^-$l=~ho9y%ZaYW1a%4qnswnROr<~@K_7O=4ln( z`StO2E{iI}yE1%7O^XmAc&p=|v{2_~%sF!7-dBXpo+xjsf4Q<}5OkGeW!WE?ehRT? zFw4c}Nl~2PZtHwxIL6v@w3c34KG>=H%TGn1<1pVy?NY>d)Pw-YkaKtGWk)eBAJgtl z;HK|WzkKSQu)-`zQ+zV#22%0c>kA6!P@JCzaORu{`f`MvA`AOEY%h@V7_V=T{2>vm z+T7GnU*GKE`<43D{Gsx+@4GV=UucGK-p{*|pFbyHGaoSUXt{R@%>pL8sETv-p@9~w zrExPWeA5jG(KQ*P$n#Ud<(ktz_&>8c28Q^S7eAdU-l+EU*8iNV-|`ETP(u~m5}$gQ zzA-!M9G!LrpYhi^a6BDZE_%L(bp$f3cDx!)KQ+Wg5~3)X&VN7LnXJ$>cw1d8w&D$S zm=rP&Bl+=89xj#f0y*PV?C_WJl+>1R*Z()EBVkX~cQW$?_qd+=r>k;wpRv&8Dp-y~ z#96vna-4Mqg0vwnTm$kvv2{ciC&DEICTJrmiInT1_FH7m2z@Q*yScvyTfFI`U$mP| zh5dmf;#Yzh8Bd(oR%NQZX;MPf2s27$Ny;zTq{=0akAv>v#05Qlfu61p*Z18o#+k;8 znbwkAllzVJKTvkZh2ClZL|&A2vflla+32kL$`gk8@YrqD{|s^hZ#0IU8i{`u9TaF> z5?w_Ve!qf5-($s^$3nnmysiIueL1ZE@KvmTe>hPtcw2Z^7#uzx@c{4 zaVukj-4ai&e=uj@S^As8Aj0&F-=(#!S|{56=|vgtsFT%E6s%O0$Q^2kAawwf{iN9)*r935!s05rAkC}cvvg$q+8J15C6Bu|#{0bdJl|=os85vE zDaWHE0Jf2!sdbNC^I*BlVvt#4WtDGmI&UtgTM^7C{JV{weTH9kX2yoEwn6Gg-FVB- zYNu$N_OW#|utbVGipQJ5eix>JaA5C)q7S?FGV(Bu5GTe82>ZgBQ`2qvNj zM{rU)wkEPOtP;^Raz5{O9ym%o59_R$6qOzwZoGwAfvv@EUB<`SaPp&l0pNi<1+7VX z*>DN0N`UGJoH*QO9Z7Tk(zM||NgUhCn@t$?mluOCw!>;@eiM= zs}MrOh(B<{5tg(s93*RE^b-qt&NS|LE?cSR66ocQXhi4y<}q_$v`>qTBWkDY*FMut zy3aV1aU!nGGEBD4EHiqYVfUa?bR>}SmLcwN#$&UVSMfT$u}!A+=qQO^Em z>xa7m8p=8m#ZRmju$Bf+e_Uvx%t~arD&_kvRczkrdiqZq7C0`^t|89edOx1f__c2v z2%i3cH^Ni+%bU5)0gJi*|2qUwXuOCNN;%XVi4^`mqJPc13bHdJ9L6|qp&xD>Br4?r zaK(y8xsuH>mKJ?gJ0EK&G-VrtFH=+w=FstlG@W+;}D z!&x9XCDR*_Qs)y6u79o8Jqt}t@@G};pA;D@JLF<4=II^9IIJ~@??ZgQVnJU!(MDWA z_?C@KF3!P&I9QhuzA@345VZO++oB^oIN@2ywULO`ASgWzM6ICoO36=p_YR+@U1}6R z>qWUc+;1iwTEa-nEGvkO%1lUrDmm4O8>zDznK4E!X{2qREDKDexSDyRHFydj$%^-L zAjy&&vNU{696uwE%>+SC%UL^$Flt>9C7Vrwn7^XfABRFT;}M*U&d(MFO}4p3ev^Wf z+V4nXHPc@X6-Co2v`3RkYi)rRiLph4YS~+ZC|p4PWnQ>%jaEs7%MJ&l$3|mO%8-u? zQ5DUK^Eo!Tuuah~!oKz-2zSgu)Z^FedNk%$8_(635`Tt)C>Tf_2;Dd-{JYdl=FCsb zttW8PYBeZga*hk452Y<9+mQ4C{t#3@J9*Gldz%J3G*`PE8$!DIK6lwYeb6fX7y_9I zV!4c_9yK<}D!0b&pq8xU?eePOhoU(;198d>hrXI^mGmHe5%W(^YAzmN)t;qPW*PGc z3yh5;Z=1O^>u*Sbme%R;5oF|SG<=G`fBy`$S15A#eC^^pYzW}xtquGJ`MA6NS6V{{ zBp}55bhZ!d{*mHY&kZ}gRKJyL9O&Ko^fXg~9_2&z%}qYM?02+2Z@JOO5Z~(OS^r;w zkAA(|H^7gxxzhFwYSbEgTx%LKDA?5CpP|*MDl&9t37A_6t{sdD3rcX*P#C}9utT4j zLxVR(tO{ADv5#aI(EHKKk@J;iMF9eEY0}6s#${SLHtmxu%HLzf9}ryEz~YmhT-jB= zS45@;QfElk?)}0$h3+il%XkK>#B*$sPQ52> zFpD`C0my#OJHUm5Rl&XvuinlspY2zD((hIt7km46D`j6-=bZ}j4Et7=Js-Uk1p|e!<%OeXtxHlR~VF+tN2$gyDUc0Yp^yH zeN_T2Jx??tL=!T44hujN{9>nL8RR*1kGwVrZ)0jT<5|zQsM3Mxyd)F<_I;YjA~FLVEZ=+;=7x{1>Rwri2`yo({ansS~;Zqw`al{{EE`eun zF|tW$rdX4s<#5tfJ4~9O&pR@V{EE0TTs$$FTdFy@PS4=VPAh)khGdF7t_!uk)V(`+ zRC{?0v@mpzLzx2cv39gAmDlK>GcWR~9cL2p56Vho?qqVQKJYSj`8%j(@iLa($Q(*Y z-xx-ABj`SZq$`X9=QHMOBJ=(~#@;$8&Uabc4esvlZb1fjcX#*T1O|5r?(Xg$+$F)? zU4uKp9lrUkbH07{{$riJs=B7$dTZ)om|~iqzPqoxke3GNG@?(46G%I*^OND76O%^L zMn$WT!FmwT`Qk6X#q!jW_7dfd)WgLyHB0ZXUAsGhCHS;;z)b^3w*l4eo#wkz79r>J zHwWs(PxdD63&fYzK-aN~R8H>y#Sd}-v?*rz51j_rzBGr`=hMqVx55~Fjk72_ysa5gHiiv zZBaz~Xz{=X*ab0sO4VtyxLQ?&666%xg$eq5<+$EmmPNneKvi_>0bzrS7)&osZ;G%4 z4YT9`68goyMUcrdc^6s&DJKD(qiRC|#4d;|HzqOc{9`0CBCmpjsE?-@A1g&pnyHet z7F8yOb%u6bJAd}8nef@*5O_^v4Ah!(Ct=`FML8_TrHlk6JvMe6BrmOxV5sx~;G(MuA1VYX!Jq*zF_ zXA~o}X&q9w)o98TwI3ZIq?Z6_21?3)s}(-Oc7j^_30E$hWETO;K}-!!%PE0THaAm` zuG#V?+aWs_u#YpCZ6~dzLGIkYovDe*H82+nO*t>D0i<@FiTMh?5c5@mV}i)lwY(RS zqeUG7Yef|aDN$g3QL!Aiw&$8>9?74|Ev?xU3> zmve>5Tts!x*Fj?Cg+e_ zHqK;kN;Hf@vO-;5pmjM@j6S(AXOAZ*AT~77l#Z8}F~H8D$Y*wk(d3v;TYJKZ18c;x7xwax z7n(l)sTkUZp?&mDY`GxjuN15=&RF^kt*~CDlo9AWQJ}r7!hU*9J0GkJd;afgoUcz2 zWV1u#mF_deV-44%v}Psr^PTR7FOatrO2>c()I5rbT_Tb@@M ztVfeL>hGwhUeZ^EUG;MD!LKgqd+IOy56@A2$ySN}pt8S&zr>5v@6_JK-+E*?ILY}H z?Le+15HP!VY|z}P3L=egFLthJ2gzIGpnFef1T@>Bbj!)gqrJ>sTd}{=ToQ8q^ zTrQu-%UZX4UnHJN^7+URdTn<{m#07d!XO%}PtRRlv9)s=bxs0fKQ8Cv{BGB$NqiRu z{~VrITL1c!)cpBzg>qFyhPT)f+bpWdzLK_Me<0Zprjd4 zofAjR#8PeIWq%fFQSlA127MrG_*_#H7;B(Rncmg0uIpafhNKJbxyWea1C0(^(O-l|+zmWCHSatV8D14H$8`T( z>UuI&yOHb;iX$&q+J^fQBp5_3p?WGRW~;8f&rSU_76lgk73@ zAT#y^i<1B~&0YL@x!X0z_OT3j)Ng--XYH>^TpGkirD@pvLZQFu3}v=-XKozeZuK^f^vC-mFC*GL1(i8+(4 zL0yxtwCCz7p_{!4lP}2w1?Az4P*?`;7SP9@!o@ zX^y?GAsQw%HxG3RCJz>W&ims$JBow-`wK*X-l96E|Fm zzSvSJz2C=oA)M5u_{7$Q7B~HKl`X$4HpRJl)`{tl@m9+R_Pz}ZN=kpN8*&bZ@}`=V zJOeLk)v(clX;Z^O^|9|y zB-i);U5Wdjaq0gXfRXF#|2_s5YtV`W{r{A>hw+KD^swN?mn`rcq4tna(d6lCNp62Q zMb5v#b(|KtEaHp;o8QHWtwH4ZBf}F*RufBcKTQ7;F{q$H*IvZJF3?V|`J(h?4U;x1i6>qhq6)n{ybdZ;k|wZp z(M=W9WRX~F>C;1}fNNQeOh8mEOkn*AWJ4b^+l-zFG$W^gGIwo3=e7W-LVR;>fuBQ^ zU-=@(!3nPGLWEjqzuv{^z zUc?qhwgx5*;Hs*1B*2+pZ(9yzXF+bsv37hFH?3wyEJ)wrtq)D!q{*jy2G6&4;>_3Jq{5i7x!)G8m~@|wUhxpIe2dvk#B*NZN-nT*k+b|h zU}}d)I6Aq!lhj#KB8P1hg%nPO1mG$B(0gNCO}1NCW#fbOE4bupY#8*4l3!(1kwKTf zZ{~q*KixsSNrwzOe~E;K%&V&*-R$`pN(sZvR5$8BPAUL0yT6_wPuCnk3h9-pn1be* zq{hJ#=Re5uwphji6rW#5-O+XSgtv$?x27Z*Y->ubyoZXal0OF_&b^1KswPUo!9$DA zE!)ukOimC^G6zX$bXj0xi>mypDv*&K8*7!C*UiFJ#Npvjs#SF<`QE+(ejUp&3+RCD zfNGJ|hIkb@jc?2%+heV0Q_Eli{4UyoSV1v548xj@mLA zW9D!}lUO;7DI70XimWAZ%k77(e2*YNH%F3XrAv(U4Xmsk&$M6TQNpfmu>tI$bGDWh z9$~Dhgs`X~Us11;O%}oG?0Yn2e_ahnQ(pNRh;{D@X7BVX954C%G7>iUgVta7%k33f;vFc-BU>-7>3fIg@;6EaH?z1>#k80y~Jhv z7fm@?kXlWp{>5Bee&QoXOb7`Vr6ddD{yaJKv|U2|8G^$#{W&MwnZV+hyWREjan_lY zM$+^AFd1gl-TAsslb4P=fZG)kZ{rL14(l6^GeBBvdKPBoXXSPL-Rc{H>05FL;B~c9 ztyxVrST^Pq_YHM#F^WcbzfXUTVxm{zS9Z%(%27+n5vso@d;+glhNw7r9r*+7_fDhO zk$xU0Jc6+JCiad-mSD$WOhTpajI&SI2%$ErEXPox(@ zpYQ!r)U<|loAcJ%$ z(~Nq0Ur_~pUmvnMAFqVq*WI}T_z}puUQYWjI{)t0zTe-jyKir;ZvUOeA(*0Q32bo8 zFSVV>XHeZh?8qwEr25=Ols;P*>h1In>LeZ$?RG?QZ*^2+Yi77XZokf-%QsgZE>(7| z3~L^L3~X1t`$}kLUWeaVnYL8z)@lSfC?nGrd_!nu2t6pl=sLpzqnj$?G@XP@5Ar&| z!(5iW$XBDOeK4?y1MSS?dtX>Bzvd*?*A|D#T$=&>uNT*^@`MSwIU0f_HD`qP`_U|? zx5jUScM~!!?R5A+Yh0>=VIHTjDqg&E`thndlEqU1oC5VUG@j%Yyd&~tQ19xS(DWit zECsX_^>;jVB2Vb*<5cNNvqKuhADfwDY9G+^E#{SBUD$sdY9S?Z>87DwH$VM z&3y|dj$}h*k6qp$>p0A$V+_@-O@YFO#`h?LQF@D)yWBYHPU@H3^zQhI(nU)&?c`d! z^>c@Gp{v{M=#+SC6W>^R_5J3*x@c}|vjIHr$p!5kx*eN&0uCb6`oIVXNLpn#z@ zk*TQ->^mq;h0@G3t#)Yc-%GKDq$cip7d&uqgJyMf05FnCWN> zv@L3nM`^t*2od0Gs%8(l-(5J^4XoUA+$?_In?-a^nyw*+Vz>FycXe1?PB8jZ+Gu z$J{zuAr}!Pz#I)JraIpDnAAJ%IiFbI2SH72DQhSRha|DOR940CvEY>UUC_eJ9;@Ow z#YCAZgllQziC7DbypAMa|&JBVhW9h&8${20heDA!c2<4wGlk`=COgCZ@)r~HSrUPwv@73k52{sK(KVtqu> z7WI#9AU*sWK-EN(go(})e!XlSg)HMuW|@hgI7WdhIWq%`RVq@#(2$Lclt4GB{z`0~ z{I67_gx?_bC53KaZ^s&4g;xtix3|dHV|#c%OWRyc`_=lbQ}5@u4up*lODC0sk5Ds| z(Q!1TuAJHSR(1i>=Y$Er8x62HG}Jgx2v7|FnZ&JAZ|cn%9bP7#;4S!T=J;(aC8$Hx zt64OzC#OOy67cvSg$z`k=r;S9RH=2@0X<=+nZ=WjqC02EB?iw!A~MS)oBQT%9ZyhE zncMKeEp&K4{Ga$9G|yd8YNi&RByi4cy}H3GyhRblCCMd&)2u>lrsc!;*1j-6J<@DjW1E^IoZ6-*X;lh+dga^kim^E9#OF zhkHjGxZI5r2}u?4o*LJ8P2x8FKF}MjH-ZcHJwi*ooRFEBksqVrU7XCxLC+cadSAY0 znKh&HA{<02*bAE2bQ@9+9jE;^EVEXOP1uwM(SDA8_YVY&AP8yy-_^bU33&W}?3uBH z+PsRStRMkT-SfKzi;}60nv1=lAkf9x!o(g4-fF8@ThB2UfcU}C^P_6$nhY+J+6kYO zvb<%J?8lg<6T7i!&cFx%&Whu2E?1-VVy>+F#W<4T;r*0U1X1w%&&KyNa4=KX2r#)f z>Ug@&VqtM+to$Kn4P$2J3^!*xKv5(!nU$N}WWHsE9HhhoRcPe3R-i6;!AwvMw$cLU_&Bg1!aYBzX3Y@jpz6t&lA)_Py!W)PWnq#ABe z%I~0hYw=;5c)5FhZN+wC%%PC=rcy7Y!=plPvEujMVdguev4DeS;HYo%kyr)9kZrO> zUISu!tx8Kq9tYKidw(U#dH^#h8KbSLl?#R4V6WxMyY&w<5*&M^o)h!LneXZP{#l`Y zKLFV=ISsS_t}@!z-wqUPZ@N!gI1W0iT6PZ@lfRbt9-^B~R+J-AqE_}6t}+#XI+N-< z(p{uC?i;gTAu5=#PMafkgjialy=5*Dut3%x0?2NasN>F)&EuC`s%qk@k&fdZ=;LzO zsz15a`yUVC`1knvhfP{XST@gByJf~mm)&xuHFuQFlTWykY3@~ie|p|gR_Teme#;hA zZqf`ISdTWVp4Wv+bYNeT-4W@~3|4QIk#d}0gWPNP@iZ*+_*YO06^cH))T!xJ%+&93 z*APWrn(-5iu-0?ev5s+?5k+?mai`Hw&klaZ)n;h_vY*D^XC>Drxy-)6(Np8Ru?MbT zwwUCO$7Xz7V7)9W{rG533h?NUzRw3V-iNqqeNJTrIQ7eag3In0@fZ02VeE75m-m_5 zkcW-iq_!QT1I~{y;%Af;0=ejf3davzOyOBv+M~&nnw{wG1&4rv$tqwCoXh}w_E-T* z+fL0RZOt_hRdJT5qrn5}<=Zv5s{72xAD`s|m6Hxm%=?F=L$H}?qs^{PuiKlKt1P9R zc|S)Ys0xyka~#LIkGAPCcOk#$^DHCgJd0LN)jHSdHKEUszZnFDQuz4D*9|%U%n$Pg z%H99F#QdM|bpMCu#`X1oLBI^?jmH{Fq5Z?t?MAFRk<&0Lq*d(`Mn$hbSNUOHU}dUg zY$A;rS0Y~RfvMRAI}PPy;M#G>&HnjT_G+{fqVeKe*>l?A;|pj_uDXrYqn~Z225(nx zls+e~N;ZgORCN-6F>obR|Gf=xsqjj}h``jBDO4$9P^ezmr*%8z@s1ghh!+ z_*qiTdQ|>GMUjCW(^wVp{DVT0FEx}Z!Br~3a$r^|_geYQq}43aq4~=tSU_vgkySAOWZ>j5DD)EkCu(|c((!%>O_SSO@P-#`0WD8#ez2-z3ugjW z`Ch0+k_}-9qo`=PlqX+KbK^@pX%bxre1B9^4L>o`;OW&>RlBAJmfp(==p^iDE+&p9H9*BDvtPa1Kj6j_!_8_7+erf=w#M$KAKLC}vLF!hw%52!N+ z2s_8VFw8{8BCU#1RT<{q(+MRBD5b;VyjZM_XoDX`oeX)wd?XkYX% z<5BvZ`isQjt5S&~1;a1dWPuO`!q`0)O?H1NQ-<>~M^3T1sXS8k*`%Qwpaonvs#TPT zS|JxN+5rEs6;FggWW;7T8@TlWP?Osk!@vXgt80Ys8_`$y2qJORhQHXsMxxSeQEY`! z?Z;efXV$#4#_?4?!KJW)fVB-Lb_8tqjY6lLSiRy|J|-BKFk`3T8r_f$rz}*0BC?%K zdBvR!X4@R6JcnR;@9bBf&Os6v4039Qgg}C%JArUG=RB-Vd4r|j!8EuI%9|Spg&jm( zRVeLymKUHiqLvg-+BAG=iCWqJ(&XvCe_&Z!`5bQ|=mdBq1AqwT9;deHhk~$K0n^`KA)b? z{JTf$KHg8`j6Oi4H8_7sfn1~O@TWAKMt<(Mtw75h?NJ6z^SAs3*5A&5V0)hqv)o(V zFB`cWdwP8zFU^kpznmljFJIO>vsy0)?LU`U9JhLUQ~dk$>iBP%A!ygXD7WMMD5%w* z{i==E^p_NorLNWy1Z4Ks?R+UHl3P!-n;lSQftHyhVDLg zdZ?5vBvcU15=j#I$BKuRwkD|XR+cc*8X1K0Gqou#82Q(CeD=>{-N}2CnZq=Z`e-}> z)pf#StHod2it47gB6j;VpJv*P{9X@-X}(wEWZsK58d`z?Pa;)ii}B-)@HgEMn(9e1id89+g&L2t@*;pNiO*9x zc~|EACeZ$JjTH=HX`K81Jo*ErA+V`KXhT4U43xl%3|UR*(?u_wq^#GUVK5nXS8H|?3n=_^`5{yz4-QaL2tkvYT9IXE;h4WKa&n(JIo)XDL zwD=3bHYIYyyHC5sA>}zr%d%QX+U&~pQXr3CD=+`k_l!tXsCHCt?VYrOgtQsTUVy=f z$eD1owEcxVOK}7@ijlw^19ceTCDg5|!@d#Nbv?@;#AzFiLZTfO_*!{J+Tdjz z)IE@a@lEg6j5k4KV4=Rz*WqqlSoui*a`^xlFa z7KIR@iaD@LYP{1Q)4X0;od`pqkpy=Q;{%1(35`4h2j%+0^3)ca(aNSw#_ot7EoS}% zfZlQnKUcLI^0hhlFmdGq-2i?n8jRKjawQ5`sl~tt?YDp-9%VylqVZ5!U^r)iCPk{H zi)q-Og*7Owj^2`$^1oIg$jG(8+mnyTU8e!Hz@|a}oGe8>eMv&wP)@Ea&h^A~1tp?$D0J`$RS7yV6nl~^)k2*3AMUD-^BbF+n||o-#K3x9HTSuKv-WH%mu?jE zQO#UyB7f}D6MF`GB?_@~bP!@(y2lL}%z6&T`X)r!D|DmX7RetL-j_}mzxyoE`s$m` zs?gq_J`804zr4pNBv(c^j0E_|DN#gTckQa(Gu5T7HQEVxl4f)1%sCA8jOXu<9lvq6Qc64FadfhE@J-eO3oT|&hvw6mmWM@d>1kV{_n5{sHHSrF zZZ0eMo6dHJ>;@{=j8 zp*LUjQHxXFzEpHLGU$Ed=N!*KQXnD!5U`U7G-}S7iooBxUcZiQS;X!zZn)9QW171H z39=NmQUr8r>Q^CDzW76GhViOqA4QHa|KuhBev=C#dcXbn?%$#H(E1gWN$xnN;zTn$ zL;k!oP3*;&O>YlF^1CDSx7Uir(oX{Azu~ai;jroNb`W%ON$Fk2wcqSa&Z=B|!hQY1 zm-DLg?`q%wj7#*>+5&#$jxy~ z(JR`7DOFt)GNt!bPsssk9kFN3X%njb>V`wjJF+QGOs1xI%ZU_qdkqv4wu8;(c^b=q zh2-|Vus4?U{|bh$7{D63bcAVJj1e2##n%gns#BO~O3MtJ0>Uzg#z%P_>zD~c-Ga2C zS|MsAiM}+A*&Z)K#5kj)S%GE%g>7@hA@R>KSUZo!FzbaWHG&^S7wRGFL11&!3Eq~@ z^sZ>bT%%a#yR2foJFt`SsdNvYBa0dCYVEkV(yMqlYWSTk>;JPWs z%aBcLkl;?T$u3`JGJjT4=ex3?!dZ30idQnf=Ch-U8}KIs!+9afaXB1*vY6eIL#HK) z_Wj}U4iuILI)EpzeYHxWiy&c}(M8`uY+AC|0&l8i|GOOw3FY7I zm5777kaS*@pUe2fj9p)_!zV5*K9RfdZK8_MmGQ&UKsiKmG)R+YHYoBbHb{PGRb-4k z*1C!}fJvr-^eZgk66md|S|Kc_w30Ubp)!={4jUBt>sM9-=?oe%I&3Xb<^|Sbk#oKd zBPvx9!zoM;T3$iGLaDw~!>)G(b(czKW^njIE!lw4&8bawR#!*nxU_Pv6H$bY5L2uw zHbH=l&U=8WsE({e2v<4ntFm0Vv_+LRmqrP+4cs*ecA%t$K9YmlEeOl5kQSjUYM>M3 zHPc0ncM28?4=Haiq9Da&Eh0~Y+96>ASCHC7$w;=4m`cg1U1O``oWx+kUS`BQep?9YL%T9Y zI;$ElB<5!Nt*KNl8j9E1PGQ){2%U$7qGOQHNE3#ni%=3FH1!*rOF0@0gJ1mQ8YBKL zzoCO|h#`&r6Zw}U&#$eW``ZyV&jgiBUs+Q)dU*2+o*#+mU6)YVi@$K{_UiGTPF?x; zh)ZdPEF6WWqP=nR@LEsaGMrFu+4pQ>s1~s8^lgM95zOxqdyvS=rA*+==dSyZ!rn8u zx+w><;jg@O+yLMqq-VOq^8qfX1|EnFp^jZJS>y&Cnjzn;1Lt`$7EZZju81tL1mz zB@@}M4NOXA8b+FAeN|{N-%oX32igEZOwP61Z#j!sSV<3s5 z*|K~v%qFhA;aqe#ZC`oZHogfVf?`^^$~N8?2ff$fpI-{m1P2}FLyYMOFrrfV?Dr== z@tSj9Z0&O;{~z0`S1C)btuWI>3t`fvQm^m(MiWTO-lghhSj4bsPqB=qFYy_qCA>1)7~5g?&r?Bo%KhPoXYvmyL@yG2zN)N zqjgc2=?y`qYMf0=@P_B>;hPddn9EOzznQHFJGFGHJVxma8#0rt(W&Hm^lOc+GGm>k z1iD?K2zj#R)*4Ph{|jRYy`AZ8!|e%JQJ8c^C)`5ETXYT{vr?cqkL<@I38YSf;nVPN zp2@ebH9FjVTw{Y3*V02-7Nf*y|D+FG5Tv~iaropA=jiA0wKIoJO>sTIctEFi)d_ zNPJ#t@@vPs#sBl@kz`c-eJlbwc*MwlX8ZFwF0bchx$)&DEY1IEm*slJ0snfTj$Y8J++QlB#7I;1|JNNRArqCMU+R^ND_YuyRGm;p7UM%aTnsc>|!pE}R zf2cWbav0)`8(pXZu)6pu>q?MJ7&B4UOaazxKXbV@;-FhKHF*_8UTJU6R72FNy8(Uh z@KCVw8^1ior}K`cbFUben7VIFLA4RlDiv(Ws~i-*g0)ResR%&FEA8nLKY}cGy*+bV zQ29xOvnJi$B018Y(h$zA7;hgF1EjG)t8eFYJL(x4YENr`UXv<)Y|dP|NUb6`t2q%~ zLLfD&Gd|vssOo0?+7t&AH|oSXeJ9+Nk%~QCO!M2D*|60S=SPOyf5$g%*fCEUYr$H* zXG7F^ItlJ0?drZLA8RD=b7(B6W=Y}1A@CuLcSUl>bcFv!85P`&KzsM@QqbNgNn$gU z-9!5@R8nFiMV1@Pe=%luB*5>?W4;weD2`-})S&A#QrzMQEp%OIGWHw$Wv65|lk-s; zTxeRBVC|*Y!F}{sQ1=jv?az3C_6RZA%YLiV z8QrLmL+o+-eNgs|3n|p-HkS%+hib4Hx|<8va z0Q__s!?w7ZSw7wsf$kwq?ZAgeJ{_%y>MHT2Hd0%ynGNg0b~p?c>BV*gVEVJr*tc!} znT^nhBZG{0=Hl+p{Pw`_aON8!O^+mDXDne8o$(JJd*Rmy@vb;?TmH(-w(%_{>Sold z*zCPDgiW9IB5@x!Wp-UGoZhTk>k>jKC-G7lOKkZQF4?bi*KcHwRyFnY1HkYyhKB-; zr4enASsU$NiUnYZ3MbjBuxQ;2ZTD%^UHjbF+)7UT)a6R! z*T(HB!jmK_--hW`eYsz#VoTd}!jNK^0kg`;u&byr3tD1Sl+~e>#iuO*)RIu~Pii*E zz#?A;+_v;@G6nIT*zn*E3Blod-^xWJy^-x!l6TN3Cih#{a}! z7^GxH(a;hzzXQOG7{8@pH5e(ow2!{i6KM5nu13~~yI_&B;;D1eA*a+}bEJb05h5j8 zBEAQuc4Z>jJSe}dp?|dqLyt#ATnboSV*Ub#M_4F|&~PAoYlK7}qTN-PRsc(&9w|GR zuSx6Gl}{CER~3Mdo}Y2z4bEy>qLe;?SdX=|;sQoz!7c_LF(Nc6BGiN%FJ}7v+t`qu zUAZ09ru?dI743p@66I}tvI1joVsecau_`=fk&!UGZw4I<_#FZ_s+TH2UDP)1FflPK zx9Kx6Oi@LTl^_H=r)#57K`Mi(Vy$ezoM-+j&apq)A z7rupGbBsFaxc9?uxy7QOjJGPJwXDgHQpZBRUN41CGH0=y z`ztCk2RuU)p-vX_=1*ecY(>Z%$Vx1Y9(w-f7|UM@Sx~$X>aUfaiyb!ES{qGtsPgv( z75Y>O*c%-0RhJr9^y}0jDZ7yb>$ErszkfC-wjW}iOe#ywFU-=XK+{W=>z~HfC&Q%x z9ogb;cPup8Vw@bwy6ue_J}&;2!@5xOa7b9)O3`0f{b+413nP{CsH!TI-4aigEip`8r`u zabBzs<7hc@KIDAx$D|iBtcCDP(T^8f=90dKMP*sS5^Twz>e zG1Fvh%e%+X4yA`@6pQq%%k%!2f%)Lh;jl1oZ|?X$4HSGKgqQw0GZk30xvXRj=Dv<@ zP40-*v8b<9xG~h`*k5Ph#l0L)$IM;|@~V%4OT(jE=;O#*Q|!^!9I7FaBs!R8j*FZ zN=4W^0RL4uKVlun3Ps1v`>TT7k`9xOk;Shyl20a<_T|jOj;JBnX|o?kDlz<_ezj8J z)K{_miEy*RghT+YTedC9cCM6}$8CPDYqlD-2g^wy1xs8)+Hh&Mg#hA(-*J|F?uxVs zN_~Er$QQ!~W*fSfN`$44Y%kYQ?nr@UBmNc)VvHy$fQOwhRO}4WRc;BcrAu&kk%t4M zQ%{VuKmBW9xOHqpHR$An_KIP%)08&FT7kHCmjMht#$#5Ty9L~RUsz4TNlCTj!Pz$9^ zIM_uKBw+#UNIEXyre2iFnx4tkH{|?UiFK8+Rns%TSK?RZ^uhABy~;X$p*&wZH7|rM zPc5&iRTa#FHq=JxebE|n4IEpHiuU9V>CKW{ZJVtFa(t$?T?>7X7o-!@ub;6H;`2^} zi^Y2*i?w@|wi3gD<*1#O%ODoEpWZm4s9N3ux^--1_uu#lmHOwpuO7+of)0qjE=2wB*pS;1RG**qxw-s$IoL;j?0h$SA=|e39f;x47ew z>R!(9?uZqGXg1dt42+0+RQ(CE2wXDF`T!Es1UOfD&Qxmb9iw7GaY)_!U9TN|EKr98 z8x!2BW-I`<$q)+EXz)P~$0d_>;cZ9>5-%%4RZTv2k!O&IQKZBSl!Q?%AvC{1D@ovj zU633FPw0}P#5;wvS`cRftHD;06Sfrz_#x}e`zk==+qLaP^pmzacbqMe_hNDC2DnNNl<9TF*Qs}qft@3f;0 ziT{C(CghO_=OhqTXm;%$O>e55ymUesRGoAbxqNe;-JNJ53gw@~J33!!xBweiK{>=t z!8G>61AHzB^?5rHm%>T5A%dK$?y^q^K2y{N6|iuueFyp}NSMu2e;t!EKk$hTs0H(b z%B={~`DAf8end%Ep$Lcp!VUhyXfPq6!UF8kzQO`dCXwOE6fvTHY1GX_THfnY^@$6? zL!#@Lp~4;}l)Gg}tEx7Sofn#ARq4p#>8rMa6ucQSHf+!pF?iYnQ;#&Vu3kX(a_Z%V<$65w03F7i z{_8Cch0@)>$eZAjhQLTF|Y`9bEd1nzuM!e;(D^2p~UX6ysCW>FA%$J)-m zw>T*gmN>?cgf*2AyaUvIKVt>a5q8k;LZc<*@^vj3+aN7yhLqoOcv2+tS<4z=n@ZhS zb;#VY1BVPo$?L!f!AEdmGR!$vD2)x-2&oX-$2=B<1L&L}f1vx=@DeiwPRj(L$Ocxc z38xvy$k_Cbdd-Vl>L&xnGn{PWx7qiW=p#m>$8E{SqsR3J*!G-7>Jjy!Q8UcZFc^O# zn5**jA*rZ^^q`P=W@!D9V6n!-GQ3Z>(TQa|^D)7Tss1QxC9^HT94cYvMA%y@YPfzZM8*A=tAutit%V4q?Ax>xI4w&8N!8(^7sV#6n?>B$TBu5UC|Q% z1%4pB)K<_X%81Vuk8B>JXQ4mWrZH3#z8*$m`2Gx)YLi^%uH-o@87T5{a|-94I-)gQ zn``9n>kYhrE4y;6&E0(edw8%(;^6r4F)JlT5V+p-3;lMD!^LI2iO$yz_*)Tev~jCaC9 zk6J7(Ef7KmX(9EBh$9>@GF9>UQ(!uWr0eCs1@V7yRcB#JZr*TSh(L5*tX=hZ-_KKU zFM(}lnRm|=$ykTYpNg{}=5V6547&(Er?}o_S>iJzy&xMy8oGQ5h=jx7d(bIpyI+_>5{O(``5 zW)ksi5q>=BwISzn+fsaU9nSfa-|E&T?B;(|) zh0Q-=i?h0LX3_Y08rm>#^5N2&T~qcvn;VdWmqv-PYq1kwKc==6B)~};xwOa1P6Lb6 zNpiOdmEWHZHnYywkGO=kx{tQL-KoSs6Xm?0zn=N??*=q$utGC084ot-%!R~$oZN2v zzYN#q`eY9LQ88#&;O=UC*#3M!fM8u<=HMVa#o@aH@lVfMSw3%*4d32&>x|weKSL)u z{R?zt91$2aDZ2;Ln`T1b-rlkt4YxPiZ5Lz zO-7iqS$h3ey;}6_e2b|D1l1zIEDc$Za~gJm4w za+eePidQSC86?{_8ypwipX!S&bwqQ!#k9+PaMX`Kur1FTi^>N4>?jW%OkO^)4>#k>lr~}fCpUlJEiI7^3l>cJ9)(S~1n;$ToN-5UI}J|UI_Fx~v3yzB zimlKMX1HG0Qv}^R*&JeCHtuD&jq2{&Z9|=k=D%HP-PupF6=PO~d~lmLyn#9x9RxR~ zW^HW1LG*nEnBGVLE0$Rv)i4?=65Tj&DYmdpM1b2i~hu< z5pABQwRvn$&4V^AsFCq7H$v`A*ib9#z!JlFH%#{WuUpPOxNIRBBNrtJSo2QOMW=Rm z2GzQw$DPk%NPk;w<9xW!UZ+(qEZKEf?9wP+E^mox1|tk{d9BIq;!b>S7|xFSmlLvm zpUNiAw+VH8;!3Y47|TziHvV)S2Hw0eEov?WvKSwRki;iGyVUoYX8^Sv|`X~8qxpD zwmhj0WfUC$inua`0cI+Kj|&FbpDw*;UN8^}0Jk$wQ5vNe+P#u>uB;rjwmzJ)zp?z2 zeC4u8x3q`ZDT8xm`;R{7@7!JJ*qIyQpH4k{LCMxk5!EZnIUAtq#w8RE^$_ zzF-(to9-Z2E4gUDs_{&u>co`c;2ML~3K*7fBIw+a`J5m&Rf{6jhm|3*2x>I6cm9!% z6`q8UAU|M(Ucox#+`xr^W!emri9mJ6i)#fKYXqYfyQK!NS*#@I34p?)7_c#Q#xzxD z6;r2y2nf%tAoF6)s6V8AE+!XaM6X8eDw4NhgbYXL4;N-QR18P=*F>`dWZ}f>eu=qPRntF-kevg+aM z*C2!$uwe!Sm&(V*f16n}69g_L3L;F5h{T9cIM;u}kc~WFMVvh!+Ex9!qisMAA!!`1 z^@^2(n^X&4l98xIq8eZoHN34lRhe2SNA-UgI|txMqc!ixPA0Z(+qRt!C$^0VCbn(c zb|$vX2`8RdlVp4D?%w+LtGc_l>h11R{Z>778t18V9{m30`pNpV%ejynz;Hy4b(2M4 z>r2!H#m)s-OqO6)&*V;kiU^OkF`EcIZZEz*rCn(N)c9Cxc9iUirYA8jBOCZ$-O=_&C$P@4% zv?5S8gXW+$xP^y)RSxNj&%vy31WS!sL+fj)tk7zPFVnMYsj07iEi;cIZ-?0V1+J~h zfGOiB!?4l~tRYK!hif*k62{PKeUzG@#bSfnxostOl)1x{xtE8R6%kcZAeKO=O)$^x zr(m!i7y|(4ABDjPXwi^GH&t7pg%fp1;ZZCpFfjr(GetmZtX*LgmNO;8`YCFxTw%`b ztLH&Acv?w`9btXG_k(F~2oLS2Cu_ps+LBZ1he2fE@+oGTfTcMuu#$Slu&Nn3!eZG` zfu#jZE`zlPS1k}1jCNR&!|MI0Nr%jDkVKt=RdEp^XY22bE<^yeVG{)w4YiGtyZpd} z6b!7EKv)UEPa02$5TvO=0fVWfY*Ldj_kkMh-)t_VZr5zix5W`OZQSEDV-M0Ic7TUm zzzx!%3k38Z@@l|{K&E8P3PY#)EY^@>HLaT#Ce)(*0n;fXBPn4@e zZQRqGw8Px8#+eSN2`X}7%*5&W6i8X2uP1wJUsBHDT~z=4g#yIV2V9>a^p zk}2M*T`JC>XFE@u7cn~-7K0e)cQsBMNhz#uEzSl5r$CS{p*4yh{+J*e%@#tl_sgL&*1I18JpsVxa^lh^W%R{Ie*p`;X)#m?sueO*( z5S7#s;1$3F@-YievHD(JUXR+=M`}F()9w8aEb;~o*Jt?cwGzz} zDVtCn6J5^V+9?B2%(#PaGmM7U+LROIO=&bH6O+fsnFdp$@6c3xI8%cF%;rl-i6DeEuFDH*pS{~Q-J9@hxo=*vHDfv%9hf>~q!%tkFo<9QTHT6PWca6xhrm%Ql z!FRy#O9=$Nbbn6%u(U7jI-=F;bU$qfK;1S)zei?^-yj=Ug-!A*-rlkq>{khZf zzw1+Ox)E*4+)34}mi9iPSVpD3E>ENQJ?YTr=i_rC==1&>w%O(&*~tl zx_YVk^H7z=^$#?`E>|PVBBbqsx4V8oHf>95@ zqzlry{g}msp!LEKcZv)(IL4iojIJQZ1l34)zTGHum0W4=1;3V|mwdA7$*%bAx2ojD z2CfADa+bK}G?t4AY20v;SH=R@beXFaT<}*E=mFDQRiryIwGlH%tUYMFz zGbU!<*OfBGCEA^thA12t4_OSgM1mJc4L(>yJ=z%bSqu$4-EPiSPdoCjzQ4WzzbDzv zxIIjB>F!mPq7Jj8zo(@2GD$g?a9}rMnkAh}`1fPai|fZQyd(otu2#Mp0uP9~J5L-E z1Lc%W5oc&Ck>y$|dPa^%^gBJ37?WgXBqgxBbi=RGH$etJ-}R2!=jj?&QDzg6+Wuj= zjgP;jg6ujC#V3MwmSll-|K0C9!|crS z+ndR5%fwdWGyZ;sFtAalbS&hN3MDBVFK7M(dmqLae;h}5pSgADD>>(q+3ewpoQHkT z%i*`fur>pryO|#Q;?Pr_p716@wB@bCOr}*=nPd}iQJ=EAEt$?%gtd=}rfMRUO{a*P z6e>AC_r9r?r*OZ6b-K=2Mqq;a62Vy4GiDjfNb_GVhFvP{O{_v@Xrbj6e?Q-B-|XV- zRX?6#eRS`}eD095^8AUowE1%3sBrQ}Q!aYN3`CA)zj9_S~xwz?oH>ERwUpi16@wYmT z%c7Ut)g|^0E2a z$DEnV-5$cG{$)OUn~p*^g13Lm_l2!gBmY`9Sb%yJ5LMjF0Xel!W&~fU2K@qPFkI?^W@B8m?-GPa`e{$Vf zSh@ZWVYZ=+$y$95giym_2gk(cMDa>qT2$1e%1Z>Str z@}2Xc7vHFy7V8T2Qt?p#5c;nC<5u9>GioB8(C9IBumEkPcfZ1FMd>9xr03%o%k`(%H z?zA0CBtOy;tE!IVOB~%Bgz=q%#?-kj>+7T=%Oao4Jgt$ZpQgtmkB&(#-7nz*N37!5 zA?z#|f(0LT?bs7?`JOQv>-0k@=g>cwEjca>xSbywW4G@ud z1F%!;L&c_sFn^lN$#1(t)p&Pih*Sw+2CT3z37@aW46*j^(@}S#8^BaDV(lUzN!#~k zFw4M(1z^QW7YYY2D@d`6J6|Z1c#AZ$qsBB#hpqVr2AS^z)r}-w(VJ883-UQ!AgV*J zV}-Zn;(i5G&=eM77>h%b2orRQQB%geO2kX^Aaf^8ETc$+gPpjzVg4 z~jn#r`~ zH0`R#2{=l>+P%2GN8a{`1<}o@H+@zLU`2n69D+2eY#}&I4+xW<8dB~O{p3zmN|1CT zog`FMN@%B4D!w4;Q$MzaJ22-h=`PM<8y)Agc0F4{^vGTGx)VAdn*KwH%{KwVV4PW} z;w16#)6`7=v|J8gMMtM2p_GK-fMJ;2WNT`-lf%eI-ACJRhwa@URl83H5s6lav^3BI(iVLev&Dd|$Qa9t^G`Nh`Le)-P z>it=roF&7(6UjySv%08}3x=l;Xm{*<`!I6!KwOY=2KA_ibF^x@fuVv>ciwX6wYFKv zeC#|jpAfM$n|RwqeJ(3FH zc1&)lE6`Rg>M7h^KAVEp$4+sB#>tmsQq9Q$7_1JRIUx5rP}4eDS?+M-fY$HXImDw? zci_u8&Pj{r!E~!ztmyqaufM|%O99Fm_tI7=JuG$I?`xWa4Jq0OCX)zNrTda6c)K2a z1?eJU`|;mWzT3I_+LYW-v?Y9Uf#?XXnfn4PL_y=2UL`fhH^w=0tP3+MFe~LX%Fo6* zKM-G-N!(^gHt7_*?99#apzCM;Y#LBiol@-U6InRh)+H@F%V(1nUd0S_@|rKJxyvn? ztE|Rktif@VQZBhFy%7NuW;vvU&;QE3{yQk)|JnA&%K5*`X8cW<>Hk;TTkvxBS?yUK zb!771-@dmI&A)wb^;GrDLeL}qsDNAF( z*6Io}Pe(me;|5>@tlgHOSc-*@`96wg695J%uqLl!@&%o$T1>V)^yb4E{ybI zUXikX{jFSRYeNu_&6fds=RpD02-7f2q_ejIg4()2T$K1V2$Og?0H+~+%U3>7 z$Cg3e%;}30T=sY{%Ut6y&I%;s{Ca?<9wT^7V;v;Gt{2l%!Iq&=l(VrVXl^&M2C`JS zxurk(SE#7Ew6P%_@wOO@lnO9$BdtY{iiQ%!1|suFFi4hI<(Czx33S`Z@e>~ma~sDt zfh$AAjo(x`RfPnQ*_g+{RTPAKP2L$gD>&4WDA=&1l?ZVm7uMlGs>nS2+;;a%8HFe9 zt!oH|6>4w*jdp5m&7E%QrVof#dK_HI-x@}lDy7$}Az1F|q`k>hq{?}+f>8yyRAgjt zx5Q~^#ytYtY3)JVnb0FB5n77F9blYg-Q`HP&?=cZV)ZSk*VtO z6ieB_pKan8S(q+0D+s@C*;vX5af#VPj6viXmwCUXpdD|#Ab}z_Kb5@^1ZyF)TTWO- z@eq|(x~Z5r3onbJWrOREOd2kndl599!J!w#GS^f(c#eM@XdYu1`H(%%Fv1%mKFJ%( z_HZF{L6ZamMGnSX_q(&GZu2WuID$Gnyw(7h=}E`}H!OWb@`y@(1Rm(yD9%A{0H`IM zW+erUy^~+kzNQ@3*I~OUcjI%vo>fEIkApV@SK0kjeA2#+L|5BR8Q} z`eCm?voN@>Z!y~1ktCd|&Xv*I%s&mBvPSh(^jbbgi45P5H6%}d{L-s^+JRiUuFEBx zj(lWW{i~d@^XKQ~Wyyt3D20P&2(Pp939&h^iBTJVHZ%E+AZ{ z`Lw(O&R?vCI=9(AaH{iqdwu-x9*-`+cnHA@Y27c(Z~CDy^>)2XlEDqxcktS3hbgHP z@})4T->({e?5Fj;zP?xtquY1=NTEa*lzv<7^M6Z#v)&8|au31Pubwmf{AkPT{TOxo z_Asl}_jabVsU&aPtz6yFR)RruwZn_Q#^}12w(EO$^~mV^dOZEqcD>_=-b%!27b@!c za=AUd>F8J0_s#9@@xA6f)Zg%+c-3tO`R%{`83=SGVsHN4%qydf|I z;1z6DtcEAEB#B~UM=dV(lU=L6JJRF$8RQO&Dt$h>#ef5lS*gRo^u3ViEaO^}hp4$W zXuzkkaPKEY0^ykn(&AU$AJ!?72 zJ3DI90(7>3-0Tea&TT?Q*+mLp*3^2XAmqyhx#_8`%YgJIuj!?&OQ5t9fvWE9yXVfk zuOL0sAgUWMBbgyZzJl_$nZKWZ3+W^q2IVr_;Bt^`Y%%HbX00TW%V~CI>juZVzhF704 zDo3G}2UwVWN4;w%ZbQJ}b3RY|xm;fM7?2nzggh3{c;FbHfWeAuWs*M0G-g*yhaO}?D*Ye9@oy64!rN2az|k~~uV;71X&jF^XsLvo8u z0nY`O^hrJ;Z7W``8M)eL#Zot08e*mWilbOwB&pRwtQ9Mk*t3!66Y#`M%i31+ioP!+ z_V~RfnP#Z7hP0Hhuw0~_!Yw}}!6l-O%Lp9FMh=DD~BCd#6%N183#B(Bk3-6V46`~aw-4JV@ zPU)bW45xAQFLrPlwV<2K7s%Pzy5Sk&Z=C;&kGfxKCM<^y z#J(vec`{Mq%>1i2v4H|)Xc5}ee#iYHViH8s%wV$;WUJp1F;TX9Y&>V;>lBGmJoA7JDV@8`yF;EWynf9p{FRqz|J}bvXL1Mw-s4@ zGoBH%3v}z*Y;LFDXE9g!j!4U${g-LrS{hdggeQ^4{7&%Y^7>k5Y3}5}Lh?9+!}w>C z8c9e+vVjo@QPpnc`S;F+lOxXYN9TZ2#JonFK-aG2KPb9<||I_yTE zd7b!V`m>^qpS0-FqLb(W%>))lE5$5Y+!TS@G@3#@RsgQ810vppT9CcMYe@EeEVY9f z{TtlvJwte|BP&)=;wp*H3AM{l4}8pN(X%|rdl#MKAJ^Q`86lT13@*#I2x_MPeI0Vk zXT&ZZFiRYV()dY}yDS2asA{J6m2=SCtXzr-|3E{v!MNO^WK2eN7cIn}n{?%^y-vqC7{XgLKe**%M^G_CkxEy>G5Z9REQ)J zh}^^x&GU1eML&edt7(mBA=L}j;VaoykMhJbD_Tew#wrw+u_+#E4W4@7yc*<~VTjlj!dx7ZgIn4|Q>8%c>y?qwoMqDi73L3+ z<~IhdIHBCERorSd`tqZRI@!GW$?ACJfQktJFSMMPZ2c zoy4YU=Rn=SB1GlIbr(0xoC4Mja*iCXQZwa68@U=&yg40lweL&T8f0{h+!t#5)b$!m z34m)(oKdKBs`Xx|R^r&y&|?{QEiu(ayrKjs)Y~f#Tx)NW=K1CO5lgmB5Xmgu>@~@= z_3lOUGl@YoA9IxhwDod>X+B$Yhwhm<-LvWL!Outgov-;j(|p}#1j1OmG;ZuLvH7us z#Mm*yBmwi18XQK=EE~i5%l6FO_yz!K|?%32oY>Sc(4!sk(ffD2KF)5G8?3J6)^L^g6OV$vem z;_zt6=@C}kjMFI!*R@GK(XbvhPk6fvX)-+KH%n79Y-2_oiNJ^=&!udQYAf~_YXj0K z+~pxXR_}&}{=(2k+rt2JlZas}6CA`iFPv%a$aFap5+o*4NL5$DqD3%5MQ~POu*x*bJZ$&jGb!tCEc{$*d`pc zh?&M(pA=aSpHtEiQr~odU;<4Pg+A*|#j&g=sv}fk5&fq;ijGUL@|j%&MA-+{)xiCBN2rrdR3 z^PQ}sQXCnCoPVeH51o-g?Ot#9hd;x4hWdsApEq6SRTd7t{%;RiN{0HMmql@Ucxgz4 zQp6gs7q7#UKFO9MjSBGH?Mr$=cZaWo%SnBX@7VAsrvk(W)zNL#{_bI{K28<$z+Kl> zs44DF@S%6_k~u=-m8f$B-_q1Wn%JYhwD~*ax^a9v{J3~KF$ok;EOj#41xZS8aVM!Z zl4=;l<-2;j)nQ$)-^+nOcrN^+%U5qkd8I`jCGPLWIxMp!);8U9Nfb;q+QBog$oo_t zB(?0>4Invwcnyq0+P;eS(@xe|CYx}jzj_g1#Tkf1pMR@ZN~O@j`45ldRX(~oxKu2+ zd5$1gS(KfaN~ZBs$!*VKyd<7YK*Q_Fp14^puQl$G4Dk`Hr)tKLEN~hd0)Fw?Y^F&w#kmT7xom#cI`qz+|y zG=3E+8l=XDB^q}**TTg1{56RZ2h?)twm;F$*fXzY3W#MtI1y)DbNO|&|nNd zG`1AesEq}j`H3wvP5=$BVy~`+atMFwNnGaKXWLiGtK3i94vJYY!(kYNC`}e!=HCb?jS3P{NIl+ zqqJu0{5|iY?&U-bK_l8sADgZX{=5@{@06slF?$6iTvIMf;l6gw`oI5W2pp;@f7fy) zfkY6Tegu+DeuC#%3OW}K<|p12F}#lUeZ1V&eZHgj{W+Z!`gXJWhb^m(-+9M$aVf{j zHEeu5c`w1|`Gsq@yZ2j?;J26CxAWCHA?cSedi|Z`T>rP@;i~(4z_+*IC@qJ&2ai9y zS{<#nblMaToQDBquQTk&FhcIpIQ9>F9R)$76o15O2=Af3cz=iP8TdXJS9PF=L#;hF zZfj!Twk462S>H&IPMD`@(Mxe;+-%mqN^G}SD*2V{ggV1l|^>vaAICjC2^>T zZ&M%Br9EW8=ycK|idN%oQ>R{1rK!>oZ^(tq@u5ZUbY!ZE5o;)g%gLfu8Eai)hT`$_ zzZGon77HxFecn*3>{d^}qBRlQB-FOU^DACMNlz2=PS!#o3N6nrs%(xz5>w~Ti7Zol z5IsnHckSITyX$%CCLW&Pd7cqS@w(|s8=T9se(G?(5`6`Z$*{y$8sSf`4Ukq1k=ETw z-nS)*!0AFk|Nx|s@p~U#9ewW(!(M4*VcEh zvG^>9SkcPcFf5K29hySx*>JA3&Yf=MILH(aFPQ9^ey#zgH`oy}=aRhjHYx0xSziIo z;8}r@O_Xcb!yClkzekUN?W|5A)I*j?*~i^zVkexE|1b^%7V>hORg`WmcN->BUtm4E z!Iie*8)YJL^o}M3g76jTP*&F|m}P;-L(^WWdokgh52F>E)Sj#s zc^G@zi!P))MKsx?hP#J{6d`#DIA7z+_`@%2mSW2vQ^p<@Hc>Q~>O1Si&d#K}!9QEf zFYwbpsro@8?}qaJ)js#%p|Af>3MCKM|K1%pls+A+!G$ndA}Fb4&{`#9JL-fiS|}`} zUJ)INQW;FkZpL_N3_wOeEw2)k)$&8ht*SZL3f^ROu}IWOhWyh(^~mI8OLZbWmO&D* z)(1=8i5#AwZx;Swp#~RzRtaKVAq$RNR0V@Sh5=Ugm`q&2rx}{OsdksL-2`XqJex^U z<Q8Vl5o zyI&E05P}X9(t(JYl!6{LB*O3W>EQ8n{WzO$x`VdJGQ8SyGGW|~6l&$|9x8t*rVD>! zVo@y69mj8=M>A<#pedwyqn&pSZVlBGP*VnkI#ccA&nH>UO!uY z5qFPHp<-n(u}?WpEzv?@LM(Qz;+LTRnvve6kwLbSbq$89Kr9Ia$xV9mRmdhx2-lkl4&s{ad)R*X{ zkEd`Yok3Y-WpO8+MY&tU*Ec6aKYNb&zSO>9@+$H$fCT`<=@d#N~A?t+8=pO4cfp}52GH>zEs4<6rzKeveQqAp3A zThD|CmSxxu?NMLyfV!bPVO?cqb)0pEyFtG>#XF%vMww=mX7()A@&pBWe41`79#5?5 z+g4k_PU)z*;KU7_7QyD32p?K*`U30E1Yd4!n?^H*T*F>*x0E8L$4?21R5ZA)VJFii z@gv=H7PnMF8*TVqzQ(MSnEbi~FSDi2NeqK6NEOm|tr6aQ_ll+5jnzL{>`Y8}Xi zf<$5k^+QqC@k0Ed#@JgLsn5W?9vmwpS;H=|7vp>SY61%B<6_3iLYx`F=6TjhCyveR z5c|v|yMfR`I~7HTNbcW!us7{?fYqo~Wo){5xZ^3i;s+tK1J-Ou5ByK%TG9l~}B@oHn6mBN0wTEDnw`K;J zk~vE&L|2luS*ycCf{V0ZQ?IwBf@$EbI`5tB%Es>>P)jRGI+fcdlC(&0R)$i}Y>Fyv zmlLW+m&(NvuYU`RPEKTTqfVv8(Gi^(?n50jPtOsfoep+`jaUm=j_1ZC!;^M`6-Hw# z24|D81Lo0EO^Z88%*dj=hoC`fEG)nQTv89zBvQ9^zjavYylqKNe*NH;c5zT*IW&fP zNEXh7=L=vxvNr`?R}d|X&xlOGCk}{)$Ydu1X$E8?TDD{*{<|o{&T%3w@wRRB6rmt*Ch+)JvwIM0k|Pp+IL< zPDdos!z-Jdh#z?_C@X>w-mIKv)FNO)FmY&gwM#4GMg2n)rXWYh{Ie+BVHW`U`J zcpwMGUw+pOTp5G1{N*k;7K=-|joMfgzLY*~te$}DXFQ;nv{~v#?sKu%<{c^XM>DFu z9o3ZNP??de;-tOm@QX;#S*v=noG0m|o9E-T99SCq+E{eH2VV z9XejPYI>wFHGghHTi$fBvW$GLvx!8yD^@j8STiX=Sy+LXj3QsMJ^`cn83g?(F{kGH z(zqN7QM}Y6Mhis8*Zy=?h+0@+8W19rSz1ax!>*hH=1Uq#bE<+{d%kWL2rRpTFGUSB z`C^YHTKE-5aTTsf_OszKtAvUYdVgOL`}grZ6&2NDOI8w`=Ju(|m|+Gn70^pThDf^M zYU1G(duM5<8lynXt<-5`RlQ4FS-M(G?2s}ab6pI-cZ5nTkk(=9$ z^8OQNUL{QnR~GZ%vbH4WLwzD~O!+P2JPr}Pot=3!POV$>4~f?z*Mpcrwrvq26(^=b zH88Zc96CS7IB+#JwrE2&YUT$Wh`xC~y_Pi-YglONN-L8v^{$q{C?tltzz`1Y&yUgq%n5qnNX|apS zU&KEg{4I&e(C>-xf|a98=BC(G^&#Lu@&n}L)JJ%Ootbd>P-^JUZFG8Z18CcqomZ0` zsuOJ%w{(^rqX&v3`qULUF5EUM?Kbz`b~xySNHspTfc@7Bb>A$BBwfp1>~yiMr+M3M5U`DNM}?75O) z=9t1EzAlMRlDRseXTKSauMKqoc%yg1b1hagu*oyiyke#E$QUk|0w}qP1*e*n(9v~4 z5ZX0VYjpldL!RYzZXRyb)RWzoNLHDNtR|U(q@9+Ozvf(XF|M$+DaFG5?o@Jns$((7 z1`X?Ny%cnh$ie|7j_ba;c43khcj=cxz`|ifX7~`y!Y-hKP-7cDP>bTD)DutviidkK z@4a;sLy+g7C{5%Sz7mvVURHp^&My{X;b7cBGI^@aB7@o39Yk+>4#9q$f$I7oBo z>+pa7^K-Kem;vT`MoEezP!xPS`?x;gh|kbrjjEr*PvR-~!Dap0rR0BezU%vOn6!@@ z2b0vEe~MGtkC+NzSAtLi?^|NX9v>GNIP!1r@MF7KV=W9VoF?FybnJ@ zmk9fTUsa@S+@!+v1fXB-sgE6G4CU)H3MNT@Rj3uatwj*#$awQ|g4YL^Ta`YF63ohAsPaB=ou2 zfvzkFRvYxi*jm{@3yw}EqFlgx82IfR+o(L%BX+gew7A+EW8F(3P5nXF3;u@Z3 z@$)`zK*|Xj)bk^GxhKR+W!7xh->*E8j4n7`Y8DYOIckzT?6}___F}q@P9|%tB`n*t z(fDnZuH8i)r2?mMT84HR#qiZ&^WMqMq)rM-gVHVf>cCF6lawQNm4=GLzu%XU!x+25 zsar`VP0uRsD<_Eywv%_aat9RawW#WEY=YW8!bEoxiX~8;6=E|iRJ=k^pjf1x_}AP7 z9;EFHzsZP1?sDGI7OBMj&t*Tu^Li{LDjBN@c{aKQ`L#imm$4n2yTKh*g7nQGC8hJ( zf|F%Ng%{NQ_5D;uJu3!vG&{26z;?`vgUXTIG{j0fn*s;fP*V7tsw#fiimUq8-&e3d zaI1teHrY95X$;^ivn_IGE~Z>iZ>RPXflfjXX^N)?{Sifqr!Hgo?_z00_)o_}Cf)>G zDy&-OC=6D*Q7^$}@^5aDrhfNC&bvm-C%bolt@a&lvA0CiFxrS{n4eHLai{RWvil(3 zAa6Ik^XOmFly6shpk7FMaIsd+sZWIG#{y!vRXKGr>- zdLhv@qZT1GY$fCs?RUGI(hBy{^p&7U^OHTDY)?h7S%bmLP`!c!u-LPSGru8}8Vmx( ze=P25O72>cRJ$RR!fwrD&s3gVc+lESz!Vj|$wr+TL~iJgp1XDfSJo^l&}_|HX$60o zCqucZJ5t85%rW^`SI+{&8wL;K9y#M7TpV{|OCgyn?9Gp+;Gc2lC}vnHlHn78jHK2W z?mWC`nqJ)I5xcnr#l{uE^Xe@(%`4t0v7DCPc|;UITuN>21*&QDaHr-et)ZyzP{Jpg z5eWIuk$(yM`8V0^oc~PQak2g%)Q4igbSyA!_g{L+^eTM_K_D`V|KwLPw@_XFunSs) zLUmo1I;~_%JhAqXHki*l=wQ?8)Zrc?NC+z&BReeuMD~PY<9_UlPSf7UtEyN9FLlb| zmm?-fB4pgxk%dfYP{5UNq_9SpkMyTo;$kmqmtgWH$O<5+HnaS|Hje|(VjS(S?#vdA zjUh!LyQ87akP8D9fR6URN$&2_$} zkj_aG(1OLds5U@FMrha~^Hi>Zmst133cEH2{5q<1S3^)&)nXC3s0_7IxwPgo6X#8e zge+WF5I$dq0f?Als;0r^bnY6@+$+0*_ zyAtox3d(SpI4v4BX8sjoN-BpODZIJTET3aKEg1XA{>q54;|oDnAZH{{zS#&*mm<#A z7M_9hw`JsdMpHK9tw1nNAz z4-o{wwF*B6wGNWsAOVe=-X&^;W8J(Z0#iwz6+Y&xg4_@+E5l$kPnW7DQBha;qU=*n zu@L||j|%md|79 z0u0)(Wl~tiQ@8T-y~G{*S>)LrZGGsNd%-0)dIzFZ$+18Dj|^34on&6Xsuqmwq9)LsXL{QPGoId>58+ zoX?~>#K1D+0p8X~C95XnQl0ImuqBt=L%rfOafFRCHVGV=Ck_}<7$wy+GOrPsXoS_? zK;?%}ICn;t1#MiH6b)?3iW!weZgOV(N^Y8kKn;mtAn!3Yf~t@vv65Xv+CGh01!Lc4 zg+4$4&{c=BepOnKX;CrIjH()=WE+Y8yoB>f@(VY6 zxZ|({Um6o2Rs1tA+9)P74AHTbog@nATPZEO$CzGV&KH+8*X$Af6pXZy1dVBot@25Q+ z47*<*sy6%lZzE_<=b=nW?O&Cj)=y57HI=@2Q{1T1I7jq=y{sPhV73vN;Dqk_7)|ngP=S?UM4^L3Guq-iIe0=<@ zqV4@sX9w|?62OFkN9xJ+ckx#xj2Xt3?-mWaKi89dghxcYwh|_1zj@dL*v2IdGciZQ zkY}Ns%>#xHoW(aJ#QBx1vsZ|t>J+!3)85T7<7%GFkbYrETv4jH_qKi=V3ggAosB-> za5l}27aRK!T~-3_V0`Y*)-RtNzM*`p_|3-l5{v5pdO0mL<4sJ`=9UD%o7^ZjT;g3) z*7v!u)%S9#6(>Y@=EPf)p(n`n^lWt1_xW}pWlp1SHLhP+rT==;_xW&#_35>c`}zDw z$?${WW9s6V?s5aStkGm-rTvXImQL#?s;=*w-y5ax>+O+8Tb-dl`u>y3RVoSp+wt^t z)$c>ikJqE=sB|nh}I3tqsu&%9c#}D(fF(27qg20$cX>01!e3RBgm(iZp z8EoqP@KO)+14(4pry5aJ@RI)3fVuZzdm_>v&{3myAAW{ejuN< z>-q63T{)Sliuu->w663bB)8|onFm*>7++uctLqex%N^Cki6-c3cg2dJdY8jbFRa8L zTh5mBBFD|}IzPyt@K=fN7|Cn((GpjP&lwM4_(>*li?92KU7BCUt9<645ySVVjAUK# zRo?3PcRc=l>`%q&cMC?YN;xr2pis57$c~RTPy3N{exsbS(a~KH3%8iPY+|1TETneF zaC7A~rZ$z>lNn!U=ql+wXfk%>=L8ED#@LohMsxIEvp1r-%K>(8nL>UGCCCzntYQS{=tQ=kC zO8rJQ?F(uhg@((q{mj-hRsqkdM`xktM#3ooz!N;hZ*3#LdIp>tI1krJtE5ZKHR*9i zpz=AzzHOnaFflj@j@t`)p)8GDi3n444!I4Tx?0;Y33UiL&Wgwlp$5&6iGd55He`wbb}Y%>af zf*&y^gh7KyA$Y+)yU<6Ua=D|U+Wrl*#Mux-p#E6ROQR4UYpNLV67S>qk_6BFU za<;e;+*3zym>XN-6RV(Ad)Vy1hHr7F8y4~3ME2H}weJfq{mMa#3g<%Fh+oAkUjb(C=?=*%tZfU>9 zGCerhuUNXTzM2L2DAsOZ~<=2##79xcK;pHqol~ZhKu)l?~PcOO~nh zEv%Sd#lk7zA3I%FZ(byWZgC}!*{&@tFW;yB2rGKH5nlPJ3J=pw@zJPvuXLA*mKdC# zp1x0=-1JBxyK0>nU%t!tEhKia*SeoxJ+b+g=<6Q5@OVu}*EF!%;AqwE=UiKim;vow zHF$7nV1kMKbpXq=BzEub2+Mo+F$BBzLVJYyJbZ7!V2$(7vHhWHxUZQtujliKrda_4ZI}7 zc!H5(WR%cxO|q1kDX=XT4chI(38YVfabGRJ1VJsen8OT4_N?uUhY*JAkA<>9Dyw59 zlqTVTV*jKMP7<+bTh+jFL#_%iV=GnIfRaq~Kx_q3Bl08|?zc7s(OME>j;vzj{XDa= z`8nA@)NR?2#A#VXWtI%|0?fr47?yf3fD8dbslJW`i$#^NIIDvVn3`Q7l-RyCE+Vu` zttN)cTe4^X^)Y|NczV2odb9eFxWptTETqI_OJ=#H#GJT9)jR_=Kw*3c44XTvd^~D^ zFg#OWn3=^|mL)Tsq3eSNG*LnX0B*`^qN3i6uPPs445~5}K+_2+AvdlU7nwRwpI>-n zTT2&@`9n_%XpBg?Ia5L5U`2UaMng02eG%d;4Acb5Z!89b7|y=B@)xLzr7tu5Qu)_l zQc+@(ru-F|$_~ZI)FHi9BN}Lb;dy6PnC1Na_4zF|i7@460D@>m|3K5Aio|T}Z9cN?;V~)g_g@5 zMXrZuTPP*pi2XSOhm3M%G*$krg9RDDGsNa^Dv0=uwkvKV7LsIz6JMy5`;!`&ybF_e zWfoFcR5~j+YEjbwoK`tnRI78O1B(HDYUkhgzM7xoOp4j}RSmCXq5`>Dbj6s2g8VO! z3t^H0O+<={cG8Y-Cx`b^({LG{-<)qA#)lp1xTsD%fDp)CKc}Xbmw7U^*b1BR&lW`w z>KFNq@6WDS#z4V$I2EcLTH{lI8xqPU+tXdMT=zu?Qm|uPIoq3&)W+DHiU?gLZ>Oti z38aQ0T2z5ClT!wn293Zp2Z9xP!EJo&c-n99+#ElMVtbl2{&~7JufuPI_?j_q$R3o9 zJ2qZ|NK(Zb;%DeJ++oy3+*Uv_c6fcgHG-dm1XfiFTA9`5ttDlX_9DwltW^cEs7eWy zIf?w!m!?Y;II35w(dRu2GlpUv1oKGO7)bhbGavM%)M^A~ zaFYhV62iLnhh*)fm<7C#Ff;_RPX{RI%U@Z1SkzA`VqJd0>Pnh_ux)&2zHBapL5T&Ixb z7Byy#IeH(xQ=f{iWk~(=T+`5a#jWhe(U{1N&6>bInzzzmuiMtopc+NIq^zOceP#mB zac?-uFUc)bgrGHaXM-p<&LggK(Y2J}wMEiNBy6zZiNFNT0qW4llp)f6X2*w~z6G;M zSZ881KIX>;A%%F>U5IuOIHm3H8Q=3KF<`nMk6*MLAWEv!E2i{+NKEOZZ|vQ$sF?Le z>kr%@mtsfV6*hMp+0|-5GJd_nwvS?uD7YZaAS;iyBMahUIV3d^q~I%@HS@8CpXlO6 z$gyJKWTiL@TFV)ofXu+pR9OH#@g%mVWDUA1I1%#EnfM@#^uxq@w?=wbMS5$7qhZrO zAZ(})nH>0L;wM;TSHbTGS=~PTJwKZV4eYP4Tl{J7^{_5QaeaI|sWK4Q?metygK@^| zPL))5;hULt$mM^$s=_W)Eb>{iN}UNF(%FCYdRvEVO^$0~)1{T{{6~`1`(;t9vA)*3lg6}ZYwtiTm{owxEBrv$Opta>igx@Bc$g=J?+* zJ#7$>@c+8gtqQ8I&nsilppw8wd~Lx5XeqnaJG|S|8OTO_y`--8M9W1e2WA3!C9`)} z=cy3NeAng;++Oa+IoVS}0imOBwFTyA+EQ@hh4HGG6=CB&jbb#(iDIJ#uG9JGA4~~_ zf0mzoF`RcZG0_`(n{g!!(Qws6sTu1a5}o`$7NE#HCITasU~0x>iydA=C^D+t94`)q zW+NreaN!%OA}t0F=Zsz7C}r}o9|t`W^z(`QR8LI8hBwuUz52>7hKQSFJ7_e#IK)_NIRvJ;$L?(3k7)gdNiHvx|3)s?V zah}juQpqAh-w0)6L(e6JBta_6F;QT+{|JxPs7jwmO@=Y{He!qH_%>Z$i5GK&PKHqA zmT2%8On~<>6l2Mu0hc$MkRP}pu(HyTF+M2Eg%Rb; z;C;M+Y>vQV(WWydCq~d-G{B9y!8kQLB*_9C_^T-zn<=9NGi;@z5Ln5n!2L{5FTu!{ z!0Jq&hzNroaMh3q@5ryC)In}NvM@^Z|^bTXMtMH&LO7IT*6{Xib zi&InOfp_t_ia@_X9?%c1a`GinP%{wc6SesKyKsu=uHdH$)JMg+&!0^+K!oQc&DQ79 z=`Ex-Ve`c$L-NJ;(!8l|F$0!ldiQ(L4$3ZmY>7+Ip00_-WrkEO)y(^B4qCEtC_mAX zo7ZIVEQ7h?k>*{`DUh18+tQjU_a<{~+v_hbHY;fH1Fr1#^rA4{!bIx`iJ zQ^aJiR%41oVP#bs<&);_A;Li=&KLQhOEKX}pcPi$3bBuBpHrw&hzw5`rJ6E$z*&>q zw9kb{0>SL!j?`(M!xcR5WcuIai2Mma3j3aX8{VjGHPfngt8lzBkxxew!;FWS#AIEB zCHR1_)~cs?ze%_f1e}_RqcvG?QN5p*#T&o%`#@48ZD}_fP=(RBs3lu<(EwCwp@%e# zq-26CfR}>QjAJvR*DluBTBerzViUk)eoq-y(hWJoLRc)rURPf|-gWbk;2!9Qqg_`kW>*RW79_2=l?a1Amu2t83T&|+8%3DUyT~(1C zMzhdjZ9rP1jX_xbX(v4~1H-sz^st-Mx!E)GB!f8FN(Uutu*p9=WBhnNus-%A*zMQm z^Ei8t;=x1|;Q99Va?yeK73@`4x?ZZV4iqZ98Tj>*g+iSmOqmoZZ8fpLFnGP{+_x z;LU0kSLEi~rSez6?sn}{ch>gYm6=_bO?aMxNOsAxpY$sD_cvGjNA_7$^l%M+X(64> z(9RO=;VDe_6KdmpgqdG8Wx~9I{^Zmps@13tKM`n(r@7(ct0&TBA=&C21TokpuDC+o zFMR#Gi9CIY8QnuKw}SZ48bRE`vy`5O+9O&X@!84u${%!J`K)sR3O|ZvEbUt!6X;== z_vHrhttrlU);a29^+n8yC~gR&fB=10(>(1T9BDhW#u+r3zIKc{Sz{dgtn@kwBFlrL zSa&9&(V9Z2@WAo~5~dI=wOjFpV`Yo*My84e`B-C6#aGlwP^JjyoXmz^RtxX?^y>9^ z(Wwm&g`Q~FuGEsfK$c)ES*lroM&ZEXeq?jIF?QfgY7Gu}b`B7mz@x9e@WD)wL zld$?`10xY8L;sIrh%5p_5F9IdG~?HrAvfl|#5l190gxH|Q>fuaRm;~NUhm0ckl z1xw*_4x3|!NxHTG@1NUV;w;y&e)6AI|10VZKfj@YL^e(24-U;)7Gngr4c|%!--QN5 zp0SF*gBHybdNnSZHpn3Fmys$>htLJTvZ~y&V2&Z;~Tx(DD6pane#4~x=-S__qS7_a3NR+QmIHn>H=0T=1!FvZD)k9Qw}faScF$Zq=2 z9fYK0n2$8U2Ytw+7qxh~<`YS^;sOas5-dbYFQ>OVPfx8(#Qwg|)XySY7S_2YMEbq~ zZ>=a_4KdB-;9aZOcht6ypkE71dY-P{`){0+0+ZI4a*ZzI1L9F0t1kyV0S{k2tU1q3 zDW^e{FaKp6$zS^~bTWx!^?ZegzB#1gpX{e|XbhVRzj6=o>H z*%{|_4;70a+BhL;3BVnzo3|P8eYDbPWNS_B#s#wvOdW)tMkKEx+e#m z!%6Va?(!Ak#OwXMRlNI56w4 zX*RywJI#G^A{D5A(g}|XS}>bhMrx=%z(oie?8~qJVo8sP)d3K_r$^l19|7n6uv;}h zf(y|lUT2&S);_GUmPBzxx?ea)XiP{iKf+GacEtJ+#1Im<*}Y#S)#(pe^&VM0KI<0L zr^L~(IBZxjF(JYxMvjwxZ8m0;eI#O&6sF)D;#toP;g0i+S(p6N+zyT+ntdwpy%zM( z8n$vnoU||d&&jwX4rn?rRQZkW^(z17+`Om!beh_KFA@(S2-Chig&!g4D_`qDhUB3Q z4|sii+wAVd^?y;HShnSqZ<^b!?SL!dhKh+?HJ--z^*j>C{}XZjbz7OLGj1Ln5~AQ= z&v5!1*hEo}&d1%{=a~B|UDEo{F*vIGzoJ%wQ)%yg7XdBqM?VSg_&ZL%{3|T?d)NTA z+W-i}4`Q3$Gykrp{SUR;{|B|>;C{F0VEOWeNzKdAj7ibhTGiD~K)}V-+04ie3Epy} zSbHp1_rFvvGr(dpq)5NM?SOmf;n31wAYcQT69z{_B9LsLmWFBb64m|tH&b@i=FLDU zWj=osYX-`vK-)A6QEnGUc<|~6dIN8}GS~&}sJBJu5EQAI9tjOny(Ma5k&MlhD$d+d z_G7>YY89uFO8bFLTJ&~!oYc&s;!Sr+J@@mCX8O&$E$`GEAJ<-= zC*q5VQ36nC`2CeOol$_%Wymh<%<6##oW^P-w8C@z#Hfnnl~dzb2m<(ip!NKKiW-uo zEo_ufmHHw?3^^laeU!X>oX`mXto**Q`{$4DmABl75)vS=z6~QN8%d*V=|k!yF@^q)5~V&$Tf{m(&F`~wP~}q8molt=7Mv8k3cM-r8SrxS78Az=PFD6=wi%4W z%J0lCoTD4C6vh)w?P7-oM-np=A}J165EESOoZ2f@jog6p^WP+-W8tt(XH-eL+A${@ zBmeA!{Qmfzt7C0-ZqMH&l5psK8%H_L`92rt9jO9v52P-yRdWs7mqCV~2FS!XZKo8% zK~7>S&|w8?R552X4KF?Hbns`3bbtMqtqP`g0A zi#R6apsny|yJ{?j;pMAZ`&6Na(ywrO zEX|eRi#}@v_Xy-wlN3Hd(voA2I9ih|G-u~bEar~LEU2dV-c?wg5~436uJ}>4LME>2 zkV0)f=?{S&JIds=#`U+dQi|_FDvNw4Yc0k2PJ^6zN#P$0i_r?wNKUfCN1Ab@`VkXu zX1BEyRZ(ZU_KLI6`hi*Oi%r8@kc(`@u+ugxMX=q)2^f%o3_R%|%3T|q894BbW+1}1 z1&S)T?qZ)>gkd)Z77?Z+*o^RX04+pd4}YWwPC3;j@`0h^HevtA8tpF8;e7pKZgg+y zMIv#jL&gd)8c66jNV5DZ4aQWO7+L)f^YP!l zhB;z@$M?lK3RjF_Jak|5DLq&Ia|i?SqXb%dPG$frV;aL)v@BlRcpLexNQP6E>xa?k z)oy=eT@Gzi;|wV5b2tDs<8x4zY-M&l2$260N$@pwlq{GgSog+dYgBxk#lT11`dj3h z&x~lfT05kAnv>4_3vR1qea{#BMJZAr$6nd7Eg~c>JZM@7=XeF-L-sGMhkwUej{f$g zRj(NA_1SggI;>^8@uQ%MXF>r~+MvLsn>KPzHXrl`U3;E{Sp`Ze5}D@RK?O?j!? zm0Q4np4^!?taK$xH%>@rAi{Sb1utp?Y`+1QQY%_aF5#fQIR?3nVnY?(7Q~$yOEka2 z>jJCKC@MJlUl@$o`lOobki4OIkdCqFl%>jt7c^RW^8-IZnjpq8;plt;(%S}oFyYRg zh)a4V7(s~_U_33JOpRjhRV%XAktPbOPDLeididxjHC^1Gf5can$%68Ih>q~{ic*!! z!EqYNWM>0nb4BS0%Jo?Ms#{b0yGr%LuA3uK^l#bDl*fndN(-ofpBT!$zS54@d2&6a5#9g7%OGmM^xzb76Z_vf=@W_7V5YdL<#P3*DvJTap@%VYqr4>(mUkM>@KKD?UrdC9PGt*4Q zCEg8_rPC>)l;zX127p-~nLYFSxIZR((&oE>|H4Joo@H~cum+o7HJKnwdf!(`8a~E2 z6r{I#P6vO_KKNe~8pO-TWLcPIaY?^)OLqNM_PKtqfBEZ>JGP?B1jx;!4PDTk*>8#F z(zeMRTi#AXOKSX0F==KOF_vG1pWL3S*|3+dE?IApVx6Q0(loVP=HIZr^<)zrl2gB0 zt3UjQJ4d8>OkivvK_IGar5ZjD{A~>amYUIZG&)uP-3k42hN~w>SGjDo5#c7R-rhD) zG>Ep%lcqM$rOG0kO1D?fwY9MK8LLuAY z{_qOHvbdbva^%)bn}+4~v8lH}r<#UZ)vu|PmG714167iQfYSD27OYY{1l5?3iow3Q z^V;_sMzvy6Zjvl+MR#_&@k<%nBsWXkNZA1QyQsfP6R5e}+zz-*Qb#3CS+liCha^e~ zRC~mY7;7qAA=n3QW2@b2B1TCvkoEg9RzyQr4noX-!Ws^TS-BRTZEmozXerALYF3dT zx@|9Qw6IVh%XQmLr~JF7D&jB}PA2}OmPNMXKio#V;v$%&@#o?pbh|%gRM5j3cmq9; zvi!oW{ulw;R{qqfC;$SiG`2I-nnuIp7K!|hJiuIGrQIDHr%U8(I$o>)OVKZTD)3lQ z_G#ssCMjGeQss|JxE1bY;CdPAfzTL>C2_bHasvIQ8W(&N;XwhVQ}91($*tqeZ@w3i z@KhkAT><;$pAaGK`{+9?+Y1vMJ;ajZSOh+}mST|N2)4Fksr+?MIsRbB9nO zLCtn3uY~nYK4*eNu++U<@;-3Qblpo)as2zm(hI}(5aI(|=cJ&N+n|@?S+QWQ9{*2I z2RSdG`abKLSB~kUnmwBWF@$jnz`NIi2NH>6(v5|w>IPz-$f%3nm=-i3aa@Ox~TWS zThYJmC+vV-GG@NMf^LTZ*R;j;&pOd@q6_L$CXcPAJjhlr8#sO}5U3*^c3!OPu80!DXR>UCQm6Ggv# z)q^w?Dc+7pM^_88t?NffjHl_JGjt(iV5LS^jFJC^@TDbD5BE;Zi=gW9J3E1hNfptE zb*dp5Ct*wt`=ViB!MHt-H7N-vVN@?3)125aV4)hO0pF??twNBZ3K5y9T1e_=N(Ll3 zn)J399x^V!IE@-hOP_s*c#tkeHq!`rwzrzYS0U~Lomb5 zR%ynqOT%MRXjH|9xH8Cibde-n>7nS+2m zD3Cq~Z4t*Ts~%ZG--Mo3-mS33PTXPq7b^c|{Dxdj#7t~?vzE<%2LNx@aaNsx#@^!;-R~8S+@w`K_AGpJdJPclB0zQQfs~>kY=vv``D6d0}6B-Kn+1|W zmJ43hSdtn7EKP70qxj+9HIS{;LUKHDitRMCoE!rN!U_fQlr7RFU5>GT1Uizg3(~zr za)&%I+&nk-c}X2*>YQQh)C;j7R&?~k)`2{!r$yH$Es8S;a-~{o4rQmlm>Lz|jaBH$ zjK!Ag>72==af+EFExD>oL>kqU8!8}YgWxRCl_;&TvoU=g15fB?9xcSp32WF1`&FYQ zA-&q<3AUXC$Q)Q>(FdA2!WuzF8Rhmm(`l(j!+la`vdJ~9cA|4V;!9TzWXCq=rBytt zT^ed^RG&cmVytj%7DxtlwKsduf~~Mv6Opkzh0Ud+&XJdvBxX{VcqYr{1QaqhcCjlQ zCeqqrTPqKyOO%8|5sQOVlM|pumup*OKA-MkXv|R*Ucy>iIJ0PR{S(*fGMqT*hUofX z8&Jpz$Bv~%R|~~(SN>%$gMKXNQ28-Rn zH0j%Y3~REI`@0|#IYPoCrU7eNoIEcQjoK;FkD)@@jOqe*Wv9gohfNO0K*!Wk60OXt z_*k=0PCCW4Tq|Uvu?5vMXiYCJorU+SVUC@Le=nXhMnREcw|qKb>cDbZSi_~^kUX?} zeo7UAJBi^CkXCN(6*PQoDq*G6V(?jPRUAg!&Kfab%r;?M$fl(LvB^9kxJv7emUN0I zD}-n?b>1ymBtltF(g~AXLA*kYVIbBqWo~XnMPy{apCY^k;aSO&)dX>xR7;zBo&)Ml zrdbMoimT!TR@11aQ9;N?Tu<^YGFVkC-;Iu}KfJ}(8q-*lDgsix!9XY9v@@TGT9RFZ zGaO5rOWeK1TOO4mF&r&{C^Xi(s4}d8%#7OFts5eys3Z0#Y9si0HC6(JY_JGnG6@?P z$65+e>Bs1Kjw8gwjQF)&$-j&gl2N2G@FbQcx?ZbX?m-0-OHKMrX#u~f5>Iyv!)xe!sg3xbjBQ)+PWb~6N-j0q0 zV@^ziW_RcaHt<*dF=+Qx9K5Va+vh@s^e zvMUChDQs9aP3T;PvX934lI$2gLJCt$qBD#dh|@TLhzPm-U1H`gG6m6Uv(fdNDTxkr z;?_d7K+@KNeGdZT>JKSL9px-_$IgLvc>7lVzNGR9EbgdkDg$r)!n}Eflu-Pvb74+=S6FL%kRYGwfZ$loVxL>-H;n5E*E}e$E;3Iypk<1e8 zlHhu=a7jBkhOUJvs$9CU(S8M*QB|a%#0~ik1-z`EE?^_nAm1~C6WEN0h@VuT4P4+B-z7(!c<$i zMtEbe8Cu;3v#n!3VVh4=ZJAfn-FY-O__Vup7h&QZ$5Zg=C~7@Wmh_5sb>zlOT%QTEI80vPbBI6r!o7L(Mq^I@#MOQWQH%aFh%-s+tyxT@}mlk;!k1=8{R?w~Wo+ zA7+9O8`B>?HRNKMRxwMRhPZ`R_nM_E1clxp97!ZWtt|Yb!*1L369$y=i2YIR#^_Y6x@J* z4Xmv_Fc)C#w$a5;7F&(_A_F+VNAbrpif_m@dlDdkB}HVHa4;NVh3hnhJIPN`XP~r< z&)gG$dl+How9J~}ihMwsj#B^A`Qg*h7MiY=Q!k=5aBoV+5A!~(UV$|u!(!-bd_h)VE@(&D97UcnR?hqF2`o%+oBALkd#=*CRPx>n>+!wKv$)-xWO{p^ z-)u2RU-vIqpH=eFVGbfV8R8;~y6vME;96%=o%MTBI7}2O#$?3`=YU9PSw8yVU&i(z zENI5_Wqpw;Qz3qOat4R}a8X9o+GnQ|3 z*yt@$12E(o5d6wTUMmuN^g0Yq#d!|&sg2wE~>WjYiY!W${8g*H% zJV2e4yO-pPC2KM3=V1 zYcHgoSR2U5;)C1OReaBfJ2_3ueRP)N@^NOpqyLJCOs1kMK3*gSPTygx*et#d?n{-G zx`bPlK9La(p^dR@Q&00qy3AVv|BB~>?Oc321ZVum6MSZ0q~~8;0~F?8^TGyd63aY+ zCzd*-Y7y}PZkwY2l+Nf0Bn$MUyfOt5I0So#;!xW59Um+yu+aiFL^11c zrpocAw2??Th6L{PK6_Ecx}x18CNy79ncXU)XLdiC!Rj`if=tI-CIk2Tgx z%K7!uR7w!qRSoiN(pMb_!5p{R$E5H92nHg1tViD=l=T$5yT3D9GK$9_%K*gJ#VONN zFkqLYwKAhwrkt^0p(rt}SVgjm3!#&I@+hRSBH7qypuvUl{D+I6(;CU5RxRwyw5Gyh z-a?#{CuIF-OkZp^9ztqsSNI=Mc!Yl>6z~X@J{i*j??L7aNOh8ocy3dYjM^66SvD9{ zPoF?1WnULuvGe1%lW;`Cux6zCyaDT|UyJJ`8fIZ>yP_;p zV1W&FXhE{HoLJ1Ac!iAAK#5v#AwNONp{dNLC+0Cn-g)S54Kzl~0E&}FfWb$65r)pn z+ixN+>fG?^AL`3PwllF~&&5}|zI^03z>~K4h9uo)lx&AZBZpRYp97T>Q7)U}rwsK^M-#~}JktvOFHF1DS`mb;u z&YCrH78VOfNIL!a0J*FPS<+o@z2NWVYbv2D1zgj+f~&NHWJ$t`yrEWgFlK^eil=P` zU;k*Soi&&DIkca0o{qLDCC6FzGp6?Q zRHjMC0wW+7!L*=&U7Ya+t1Gf?dimY=xHs{$ybPsT(rAN48}s1rHK^+p|FV8)bZp5r zbSH{_b;n-BVXWjBjt~5SyF$3l!1P`{1dnR}B$pQ_JkFLTLm13(9trgus^eGc^}GUp zrmr&xy93!IXOPZ7A**bTmtG$!4Mw&JD&wAwqnFE#qQ!un+EB~(B=oKj&+zm~A-0ESz?F8{(zgRo5bnolyp_P%nZcKMUK zppW0%>)qK{XWqG>a}WB1a;9(Ln8CB-(>)bm9kL0TssADS7;P&Z|I3S}!SkKRCg0Oq z)lktmmx5;(>pj?C_|l|V4cKJLI1irUdzWP#TYU4+HF!Cg2kYQhy@jmUX|Bu@G#W6I zaU%~_2iA^nYi|18pPz5|-R*EVH2A>rJ!r!VdmB zSB&@*Z|qms=2#ihps7HWJegyiKVFauh6KL1i|B-yat^c1(F{vf#ZSisvHj&9u7i&_ z+55H&HlTx#$lClC?GitDKVsd4W1(h~$+5s318+`r!nKRCx>LWC7x1=!K-Kl-)bu5x zS}@To;f{-W(oJS9&5r)_bV+ZI6VUoISPmqhYN=^Pce=DLnyZ{0G;b?27T&wOM*&i| zqaDi+LYg5sD7iGRj{6>JI!U{1uhOokT;O%@*?7A%4NvG%Iak_}@-9Olgd97@7KQ^h zjHX}+;}+u$ZA{Puj_KdfTse{xdK4@AFFSozjzQLRn?R`K(bQd|)rmZati*A_HaRzz zrXIXasXYXv6&)h1Y4OUEX0b;yV95`T_#H<^7dFjNT4Njv?S0FM(l4f}I4g=ql-(rQ zgY_zuu@kQdA%`N`${=LUZ6$0qx5MuDQwWcy8b=5qt1n*OXt?yt+ze)SLtdX!4D0(L z#4XnKPBncNJYt7C1S(6V>3_j6M+eJH=M=S@vn`&I))6Pld86qPv=(qU72g@mm|~Ab zS`Uz>J%6u!B{gxXvMO!^VW!9jE|m(|s*~u~seq^>j3D z)!!JnX8-y0g~0f$L^Nc=0csKjRhC+6w`cmf!+S}$bM%^g41US3eAcyes#;b7pPe|A zjk3z?Vzt*vhy0-O86^zl9rW^(IiXt5C#i$aVFpG6<8W^l98hZs-VoyW~jVnxNfLOM<|4 z5G?kt<$Owli~^<;)&uB$?!K&V%KT1uIVgKlHJ?ztKN!!>Iakc^a_$f`lMcvePyd{C z?vhS7WmqO(*B7C|I6YD32}b0QeHQrGr`q_|HwpN=Y7d!&^|Q|%zz%C8C-FO6kuH+< zZ0;LzROY=Nvo8!gLj+vh>v;|NJ+FFhzH;~66UwH1{H#6s-tHZfWt1q2$b8&dVawzp zNw=9GwTItePGFfyhhkjmldrXNJ=?lL%Rjm6?cC90dw=N~FcH1Kl+Hd+*XZfo@iwsL znx}}Qz7MWy&B;-h&jBH2Wlz~2id)$$1xErFCzZC{rbRFl?g8sP0h`ZrIn#lv3>OYc zPtpj4x#teC0vh0ybJh-NI(o$dqi|-JGo?>DhjF4U>QY(f4%`BWT9*IZVkQh@`_U>b zuu3ktL@xN}EA}ZTU9Ueb>Yb>_1`5v6lxvGrWZp`nE-2cCkI4#*Id=AuCI-V9P z+3Q3ofKujbouGBeI=TK=gR z5{-0`4B|+GD$Q1$Dn|K@19x4yDtgf|im?FEo0hEF)JEuLDwsu5%0k`=Evf zLs~((Tui~Kygh&pAbw5{-;kLEqt_geDO$K2K1JblTxf`RKp90=jiy5NdDvJ%MQU_j zI<%dc2ae6f!x2i`+zH*X{SNF`JOlOtG6BDte^#{=nU1l{R3gPr-Rj;wH)#tVMl$wX zO|dVAF_u@*CXvkZ_jH|m-4AkhrglZaPMBMlm zri-KXZ63%20h!Yo3^AkYR{0S^4?;42S^WSbeO}!{M4;F|zeK{F!?2-&4o+@iMG!jE zjcyBKVkYEcjjJLlscwfbL{ly@Dhf;Iv4}8fCzMhAfI2o@;+(pqHT;18Pa$to(JGR) zZZe8+rLc06DA8|PO+KHDP|r4$^R@1g8$_J%V<8wkE~uv>+b`jpRsiuC)Stq>#j$CJ zl?#97#itdc=`jDIF|y`Kpn8ra+95MZD5ZJS9;BwU=a1!9s_%@5aGTx~U(`MXaa7(u z1`?vk7kH#+? z8*LdTo8N_037N2f+ML6Ew;^Xk<6XFn8(r4=25C$+E;YoI5zu9tio~eLTBR%6 zbvVq|c7<*nvl?#ZIL|JY+5201qy;M-@p9Oc&o7D8&fU=b4>DaTd})MT-5vK2E7};; z#pdG5y~F($Y{W=PiX>W(IT`*lS9Yd3_!z!Q*&Lu9hbAf$PlG$KNYGw#S5GYVeK~G0 zLzF44%|8`{MbX;z&^DdwrcUdOpL!QmIlew6w%Z&dUTUk9FmtcW@RZ{Qvzg25@VDBO z)C?xI+fBAEMn?0=Sb^xlf`+~97%P(M>fgY>Ijuu1v5d+YCsXT zWc!9D*9py+G%ZLxqtXk5W#bbyjV>p)$UHvX1H3G13cNYhYv@-vQ4I@6Z0`j7VZOma zAUpP+UH|li>se~Pi|{;mxElw-3&B!H4Q?2pb}*ysk7|I-^pJM()ZgzE3fd^b3P4D)YzBdf1W0R?I2N>dNXimto@R+b7 z<|8wagj?=|QaJM5OStx`5#MjuOld@!JJ9O!db>JW4=Xze z(EkB%!22u(@+}=D7X0yal9`_8|9JOA>>uDsrnfd6=psm$jeVa7-io2Zzf}CYt@u9? z9cE!+W%<7?2oCQ5tp)Lpsd1vcV`}<+l`oo%ypg2P=>H9=i72zq28xRo%EcvzW5)GG zV*hSO7tkcs%*$F^yV{ zF2m@9PSZL57oU5@wLa6Vb2L^Jqk;!m3GQGv7+eF*uxQ%0{7{)i=nH2P5deoXhzV{C z?WjpW2GlH|8FpgkawWp@$qG#UP4n_EfHgVklnfmyL`(#@^MIr;maneCp5L4fepA%} z*?FjnSucXo)9AnmlL);;CBe-9shZd*r=@v*$eJY4-7Svy9hEmo9loupW3`E;O! z3|`KX?kHZ)F2LG#ONcZEIhGr9BqIBp2HUYzT0gk;Fi0;!nLl6M15s0n9ZrQT$7#dg zW6DYo2~5w06pJy9MShJqs>2H%MaCUTPfU*`*(Yja#0sxQSTd8T)BtcWqbH1o>}o>b zRbfLl9hjCkkA+%M)U@hgz;8aIstxRcA*(XuC;kD$-j;SS>2|r0I&z5^i(nR6) ziSt8u;sCH-*ttn>Aq17+8nixYPfKCtTZNb{N$Ln-;i9yvl3vuZrc9ADD%~cr?4TDd+gTiQ2o-U`nrbCn;N?c1bb#a$z6* zWf-fJ0D4I?iZEFTH*`>`BFxCbj?5XWHNz;ccnb3O8!V6tYdb9JMO)63+f2*iRdmA| z7ZutBhDM{IS<-8X98w&nceE&`=7atD$jgKEzYj8n2up{4yD8Ey>iy&fwfsSg2fY&d z3QH6R*B8E{)K!aLNEYr#Ydxb0mgmfu-;RJP!Skul%k9sK=ps9Zk%w8XU;+J;iRRR{!_q4x1;2vh%^=Wk>(kh+ z=MIRhmf~mQ+3n|?q6TAl?5Eq5hs;3u$8GA9#jb0WR$qDSWsO~q+G>t2e#Yp(h_u3` zn>AP*L2_DW%jUHy`-zSG!i-_9hIh6)WN|Ff5|!xxuBMw77$rD>?V5uch4sN>t?+S- zFs(VaZRc2w^1My`Wjl7&@OK#T#`C3HPtzAhCZ?8?G0NU#0CbXZ+N-lm6blsfZq{l~ z`^J}!hpYX&{rUUNwaqTy=ew7zAw}Zzx65hCZx0Wkou|$)&HGLM*W)nax0~MDzzEcP zy-|0Ezatz>J?&2i?K$>>BOS`!&PBxj&x--CFJqiCul{K1FXCyxsO$5&qB_^%V)fB#;d_jb2k1UwC_|9bLy zdQhx5PX? z^_d|{vdGg9eTVGbKE2J7i|rkd%mA)SKra7G?YW~3ciD8TH zCm1NrFWyE06A3SMRTAWp8}`NAVNDxLgXye8?iAtJu9Jnp#SZXDNg&LVC4PrP*hLXe z4UF|g&gf>5*|?Zu2X3d;9FC7EW#d%jz*WYse7B~u{cAIWss1|=OOIhEd`wpbGmBs# zQ?*{yFpJ$6bS<+i$e+x19cj9&oMFQgG6~2<+-;LjZZ8X)d5@dg&M{nIwP-zl$#6We_7K^jEqr75=zR zO{}>-GUe{VH5}n5vtvTMOWLUnCw!NsU#WPAkr5y>f>-k&F!UlfS`*1 z-VC&z)qQKDFM!UW?F7Z@S=bkjHmB9y|!U{v_VHR+TS4Dlp z=@?f7Y*7g?q4o3?>+cv~2h3xATE#U$&iH38 zF7e1&>g0ZKH;MVtR8FA2rqMwo5Yh|9|JDj%>490;;Pk{r5c}7&6oWi_%syK478RAK)gz>S0JKbUSa1#41X;c8hORckA%upmNC>_&XJG%PiO z!hw?TDb1$mssDZS(bhCYafDVd@j}K~EOn`sSzS+)mT9ox?p>5pbbYMwYa7o6?3)9y zm{ILQWSA5hJ6t@HagbKU8EvvNS+5X0)y92jFk+^G6v~ZW(J^zQ<)Q{v?KLD`-Lz$m zO2^P4BVN3#jj^7p7i6MG%lJ?|3RNFbTZb=#W})K-fYF;GapqJc%93V|3SZy-Di)1O z7m=<@T@jI9uXh0+Y?J01hKvc){(vVdGz?jzf{A7+5BNZ={W%;}_l6vGNgq*q4x$h{ z$P*@s*%_n0Exiy(f$cKaj93p3^&MY!p&1l0i&_-+)zl6OZwyTd3a@H?X_EFtJD;8D zC#5Z5e ztvP?eIAdBlnDA6-6DV=al*po*)I2=;e;7Lppg7`m+XvU+Zo%E%-QC^Y3GNWw-QC@S zI|PEey9I)~C&6Bm-Fx5OdbRIv)ugMFAzjTd(|r9u=lsru*wU`SfPv4K`;E%l$=YAl zHc>P}LE6y76*$ZSkgMiGClZ@t$NT7H(<34alP22``jJ?AR43eI;l*%Y#BuONYrkHA zda9*EfI>yQltbh%Rw4=7C|eKwTDIxGOT1D;sG^V@>GF91nBS!wQ*xLGwP`T9t@@LBm91&AT6xVM= z$McX%?z2{;>P(OXKZ+AX)j!XD3?SpQAr&Ia$8*F-9}8Ioosm5KsM~)w=voZgXwG)_ zIVIav5ln+Bp@+_1D-X10lpaf|R=+&9k8H&Zy}qrIZF(oMk}b}+J+oMp+gwhKjx{Xs zyq2Y{I2BM@B`~B&5OPS9%8eMBFDs)2_X>d}Br{BSdZCyKrhGPalSMW<=Amo$NhnA~ zm007?QgF)feCyh1x#pHlq_W?35>q8H(Uu!b*@E76HNsrEDEP8HZH5_o&=^+kox~v= z{A{Z#9Q@BP*0QvK^frG)I2icYADiuks+hXF&?y+-V8Kb?gN9%}1NO7DBi|hH&oOf% z{zpu=Hd?cAm%wW531Il;%g`;MIriG=SJE=@ z;<*>|5u_A>?qD$GG39eR1C1-e!+r*B2cF+mz2mxXsRpFU2huOlCeWl^-%9opFLJo) zPpK4#Yvw4tu_5nhd=WOvO_w6DUsR}b`xxTyDFqopVx*TJ39=H`j^)^;{DoHqr?gyz zm{$sr-dlRQmyxE-aM9s+Xi2;z4H{7%oorIRMdZ8IT-eNNSy>7N4P= zqsUi@SedO(wP-1Lz3<^AS16ZJxjddaoySPx7N%d;r2(QaWCQ#FXPD;ugkin$NOHqW z+@Xn|&kD8nK44f;pNpMc@?{3SG#g0{k`gFOo?@?Um&>;Iikwd?J^(YM-FqGmQxZXh zW|C-**%(jT455CFiH(QcArap;d_4Ca?nW`&kl)2_h6aaGn-7iBg$6^&5_ow*&wE7ZmvNyt)1AFQGT&YUUQ}JJIBO$% zAuugr&0SHMG%Pu44OOp|ujX$~^}TbB`+r3@x4)trK`_@`v=RQzN^ESwHlo!T-Ys`q zR{}f~IrrzQo2j{NsXtG{feiM_x^SL1N9Lu z;8O**g6i+n%ga~4tsqnM)adx6MePO^x!=+X{%`wH+s_ZDX$)OnwpL5zyj$r{mv67X zDztZL=rUyPt-=Az&wCAKv);OX&ujSK3#fFSOLuw=&DN#Qvap-W`Rr5q{XTEK zL`1xZa=-NB?DBuBxE1i~D&;w}@AYo$bgx5rsWaHz^yeJezS>^qC;#{vkB>d&{Z3=T zlJJZ`xnCkc(0AL{*`Kp6hr?m#<@=>2R#>O|G!TX}t17X5Tm~Lp=O|Xr1D+BZGlYX;!qN&L0a4U@&3pb_ifnv?LzkL$BqEHgbk z;U5QG92o=RSZ!R7m5|zDL6lC+UbrWH#Y%csOnVi+Fk5Y%k66uB>T$X`JrS^u7<=6E zE{y?L%S@K(*$p>XmN4KxV~H!XkqUklEfjcCiXl*@sAeHzY1KbIL64fI@}&%iei1?q zf2qzM7-Mo|sQ*iK1BAMV*GTPEd86`{jP=`*B6bOGAbVmp;2bcqcQC(;2ha!bsMZcF zYq2NUI-zaDNR#wQ(}wNJ<(d{=zZbl&H={2`iq-ytP=@x+pk3xnh9u>}^B|R`S4j=Omb3$pqUl9g*!z?H8W7_Qy`q+JU z7HUUk+RQpQZ&Mk8|96;94@3;#k8n6b2CzJYEC3bH9JnbQV7J^cg~~cne^2B#)D&k#sYOKF?<7I;D$+-BW;FAYN0etTmcbMZE|jW^m^s`}jTSm_IL5msajE?H?cB+?)%B zbzknyJQflQ*`ey>THe8=`4>#*d0&1u)r`E0>5N%H+wB6X%gkvOExmZPppS6r=a3yQ zfm2Of#SKLavkwSOIVs7Tx4(;u6c%%T5Ij`Hv*!tjn+llfhBWzg9sfc8V*A{_eCH)pL-qgs(>(D_z# zQlWi6C#}}(eYB1#awcv)KQKl1hneLHWax{9w%WO3z8c%x;0Ne%ymHV=aN_bsP$t#W z0Pt{|d`Ml&cu<)ww)o6Qp75c~i#Ik_ckqVq{RC}Kv0)u|a7%L~x%5?e6Z70^nN zH|&`W^-(Bp!$Bgm5>8e4qba0)wZ~9dP!vKPxREdYIEo*1s6cXRniqC#ajw7a+E!Nd zt-(MQppHKMHTu5+BA)^cF8ej~D*Yb(oS|Y>7UAN=NuRv>^Yp zN{Do1gb3XDGm{a*VHUS+9G@<62G1mi_V|X9g-W!=Cjab;Yw47moVEgay)IlY1>b$_ z27Siqi8%Vl-2|a@{qncMy6Z5+v`_wHg-Sc~(`l{sU@xU_?OiXhBwxV%db-{|d%m5< zF{Di!ygfgRF9XYDH&4THMA2r__x>{7o5*9CcVDhMy`w!+ZrHYsf0_(&V_U`5J`_)gBX^DoqzD?Hyyf`yoG9U_b46;xx=E4+j`WKTs6% zKR;pVBZ%Jex*b(ckkxuisc9VMt7Ti#f!64Yyo7WMbAWAd`t$Z`nC{O4@5(>n*Y<>U z^8;)IfSZnKPgZG-#<^(>uSV$0*$S+HWsB8_xXgV}-6xNdPvI@6xMirb9$KG|taW6% z(p0;+q3U)AY>++faXf!?G3z@%?_ul>>07bHdDI&Mio?>R5}NOYGF^@3;P#IhXTx1;=S1yr);RhqkhcTxRM7{32gC1d~J zx-9;ON*1T*mVz&qAp8qPn7HUYdG=Q(8x;Ikne0nlWo^#<-Cg%^Pq$@?eCJ7(|5LV; zGs=_^T(6D`I)G8$cS)|ghZuBB+L!%K2qdg>j-GV`3d8*UAKVW!VC9A`~ti2rXYbI3^3d^%lB;1~L*OMI&Yu zOWR6zLvaiPI94J9z{+Y%I)n414PzzK(-K%cJA$D+F@(VpUxS4$B5f`fMMc_AP4+|Z zQ74M4INL`E#HzA&gec_5EJjgfdh%%Fd=xpX4Y9%QAV#E4cWBGAEu#Dg z@31fA7xD-)c`;|wdDhl$TI#&(Fa45uDncakeR@>(8i?$GCDO>Q2NsrRN2SwV@jleUBQ8^0ueqzh4_%7*7zq= zP%3iFZg4VDpu(^4C>cDHosEpE>6}zZkUdQYtRwn3%2wo%k)1N6fxZ2RtXyFp_~H=r zOrkv{rlHXELRcR=7)cA@U1SdYk?O&)-2GFSM);=%gE-3`Oj_LTc{G`D6Wq9AvA9#P zx(6=?8#euq)8-tx1fy%@kglL9eqKL4|;ZT>bh<;4ZBXaY>_k< zmDO#Fc4LuMFFIC(&Bh=fH_9<+^ipc+q1u?tok5LpO{6gd?=WYKZQ`$xGi$RE!~ZLs-diH+tzffdWu1BZ3lL;o<70^PkwWTS_E0! z>u=fiqHeHnTe*nFC|S(|<49N!p+J7h7!@4{Irqch69<}r)&kuGqIR8_bVMD=GVzpj zjT*(!TFu`#p2*?5)|bz}_OiCSjdglL4kOzc6s# zPR=(C1b+Vctq>O8L!ty?_wJGzg%4K`}{eWbbq&x zqP1MkQne!Wk2_pAY=<7Y|5;`LC^Nl{y+00VT<$0701Ts73dvj~mb0h~g~U;ScZVjf zD}ld1CzG$A`_lpZe0e3ib;V-A5PNwOW)B>bd-kD);8<=3|F`Ggs1ufHIdlT%-fob} zfGB2rY0LYLaB)mLw{?Y7HrT)*a%^*MQ2}rgbJV0$JowC$LJxj*mtQET?{fvUP!f8y2Y-GD)Nx3@xdHjFmwVD?AM zK76taw&YJ+g|<5;5e-I;@;+&L24rC~BJOKg}G9dWQFLJyoR-NQdpk zV7;mCKul$@0hb3#Vy%D8D7TIC`B3<0E}EwVV!PnXI|6A zh6+ebZO)H>vZ7S5t>E_Fi8l*rHddls2dz>d#gL=p8!)4<7+c{Qvy|rz{AN;T)KjQF z_WD7?d<#W-x`=uCy&UUTG0Brv;Y2stXI=3#sxjb%C9?J$k#-uYL#B#5h*5Par$($P z?E=&UhEGk+Ll%e3qDq|*nWo9m<8nmAofDD4vAtt-Z+nQJ!0?tc6i7+p4l-klWx^G> z8}i6aFV2N-n2i+x1j@B5P_02pd(>SRMl7$0hZn|=4s-taf%6^t~tc^EGZ`@&nI zQziZp(Vr|IkUMcO2M9sKNxDF{0}&sVI*3alI7RAkOJ-aW@wK&(f*|CCtAre|ju(l$ zRhmj5r2IIHn8+PZy_K?LX4u`b*ip)I<_786Tuw6UI_8No*JS6L#tFyceR-_y5SU|r&2YDEC0(JMAPbZVZrqs%Y*Bv2g@;3Vrk|+XP2e`o z4e~KIpOTsP?fiZ#In*9drgy?MSfikPCaq8=uIm5%rMKKF?_%Ds!{IS1*2c%YqnF;Q zT(wU9c*DhC?;;3DU|~f$(vn2_n4t-9ZcbyCKHV91IB@jW0`GX_z1Z?iP^}Yo~N%vr8CGqb`~P8PPx>IR>k{v zZ1XwcHB<{f9Q(PyI7(`ToXx)w?Cr(dp*JWzdNbpP7SCSZj?6N9LB8qhUt+#?ELAqW#|LTq93gD z0BujOhf&A&iz8k=J;{TJHsG6PZu!BSxnd8?QZ<-<@%Z(V%FjL*|3p`T%{-HPnf0jB zQi5IPG*vT~3ubPPIKr!=`w8H)wCdiWY>q(02dG+QH0LP0A;*4?!$zX9RpARN$%kur zaqPn;BnJ)E|L-CFi8a}p!_p5EBZsGminvCh1Eage*U+1ZpG;7fGvruI@2z~KD% zh>inYz-LqSU@beEonnuW&{ZpnY4g%ZpmYTIF_ND8b@-?MB|M@)f8_W#vn<g)VRAK-* zsEUp=wbu6RDoJ10Q)Pq68x4e7^I1bDx_HUi=E`2OVN%O%y(`l7&jBkgd24iNChhHl z`uEtz7YC4+df^4(;qwFi#EEcJUdSW^rErOGTxvkdtc(7G_Pvm3{-Q83XbnWj2W`}} z;18@AdGDJtaJE8MhGJ4o_}gu<@Lft76Ga0&$6j zCJIC8Okg`ODiShZBR58@y=duEiDM%LtE3R(g2UzFu-gw4eu4N$>F(P?JKRY5lcfb- ze2_sATg7~p5Q&CcX_ahrvs#IMQ~*emyn5Mp~>WZ_F+x?GPUtA{JMT&IJva z7?jCPfmcF|^LHlG`_NQbx~JJLruTtW{Zci*KDV$eeHwID54U(txUQ+k6VvFERCh?^ zCrMOsr%uVQ9g9-q6~^PLY9Gg)k{ewwMreBj`J`u~L4A`mO&jg4;To`^i&^gxu!_HW zl`RujxyQ3hT5lEzsa}2&vz}QH^zHlDkbetpl^Y;wEo)4g4sKQ2OCIh8yQ0yksQV!; zztEK>ADs_rL#@gS#Z#>cNrPc&tpO7-Tiq{FK}jWwf;;>!hC>krxE}gRC`6y7it>Ba z!<}G3)0#A0S={I%C}8-lwQs@ct+a20ANO_++V6veilr<`vnk&EkOZtQm+{?EX z+@lunN5K>JgGl?jtnx)h6BIN-uy(}Hj#YwZ^0cD_1F`u?-eHqi;ftz7kxiy zWd$kO=#{m==>uRuK|E?t01eD00l6(W0~~bAQ2laX3#_Yy;(>f;Q9#n=YbQ7KF{qaY zVt~Ropj#&RtDrhzJj{r`beqtL;G?fdS zTdzUE;Z{g1Iq}97X`Iz0?4GqNzJNg%?M&#WFopS9*nwY_c;Z&A?dm&htu5PZ!nSnZ z-O9pydtAoR>tEA~eyRU_eBgQc{1x`i`SzJ1Ctb|P^Y&ysOGDu8v-|DMkKsoL0zX&( z$K`2$)O|bzZKvzs0yT#e$#=}bY+*Dr@sUz?lCrqtg#yN_Q7nXxMex)wioaXSV#P$F z4q{V)ESZZb-n*%Zo}{!u?Eq;ta8C|)T>TC(Hm&=K{P_sdor$R$wKZuarbfT?7efd5 z9kM4U7mJaD{m4EkcNMC)*(P(zEl6W~7Q0;tr~{Rra|xc7i`WCNgpHA$%Eo{WLfA_O(e z_dyT68#@Q#rJ*^+?hoImG_Q>vM`!n!5^4PvNY*H}{GM08l3vYY2UT9Wv*Jr843j|6 zPw~z$(o1$DC}FgEmUm@HFX$=qxJzdamJb@-Z4Tv=j^rgW@nw2kH(w4Ulg7ABv8_E3 z=2kL1@O5)nLQh1YQd@mq?)ClaFfEOsd>vY>|F2SZFYz^}a(aumtGCO|?13*&- zz>x$MH)#SJujkPa>PEBBT>ML!Vr(}6H}ay2!S5x@Ay?qm`dYFvot$>d_A&46^#|%^ zg?@Wd#zHOo@#Wj|u!O_wePP$@@PQ?I$xLT94@!FM**pfBbOi1D{$5%sdo&ysUe2D z|AMI9X9s%W@jUPHa>~*n_uCWP#Vq56{dTTWL#4F3%<4rQ@bFwGnq_Q!I zWQD&{8O^849HZKSs`#IfTBYm|8Q-Z*or)671)#7sh#b4|081WV_i?<%jkiLW`_-cv z%f1IsASU8hO@f0h>sVc+%1;|t77F+d*Yl<|jaCLviZp%EXf_)LN6l)LZ`kdebFS>M zp0f@cT7qT5%N)?5YM9fS$moH9J)JX`4lv8+T_OPY7=U`_@>M8fuglnBs8UU$830Fe zREzslaL@r1lfPh-4ck{H>R z%Gxc&9WHGj6Y?x8UOFpxmGzYDG=DY#<~#bgx;2pg!7R`UZ|Zu3{Q z3(j2*t`-^_)rVa2p3#nH+_;_b-a}=9dG9(pi5S=-ZNPPU02G?D}>k+UCc>wzUCj3Csf=7`n*2Ahp0qqb8Km|xD zWfpN+kB7(2`xdr8wC7aI1;#o7d)P7UMNF-eL?fk$$#dw~IIXgn02%-|t6jYLL7%@t zw_UvUcO?H2Z7P>&XFj>j!11+NJ_P%q**HPjQ<&5STUe4>;*%u0S&Tbt7 z%}IVtomfClO(j!i#&nZhYu8jJ&GxetT+GOit@wgx1xh%Nx?QFC-q2eLK%LFssAiFMUb|wD7$2jMnC3e*7%nY(!qZN(pehK{8h?|#)1457|e$dQxzcx0=toY9yO+Hhh^M=ZR!svR6$*?1p5 zx>L;;D7+Y?K}`K~b|4Z(5x+&(@XH9*65a#j97#y=H5wdY8Kx#kNhq^u7_yi!=zj?Xh6eqW8Y)ktSMD@3TR~e$b?Aj3Qw}S>NQ>l zt2+nBe#KeBtT33F;F1!39FMkR!|$PA&jKZ?pacI=_+14nZTOr{zx(wN)M9?b0>z>+ zI#ysuJ*j^+6C&i2;4wNjkMaT=UrYc88()FE0vrEP(OP`iSx2$ovsHnTY5}h$|LQZ0 zjPfroRCp#_sG2Y{bs<&YIZ;|Z_Au_u*%|L5=L|r zJ5?C>qsgrCr)e!VSf5|#H_THdg92&5Z@OcGtG)gC&haw;9^ZDK=hx-!UjMiIX$FJs zo{v8uU#KzAj|7Yv+>0Bie`ngzWtPh=j0=01Xn%iWI{&U9`BOce{khUi`Z`zVA^bYc zJK9zHn7~B9e1K}P1NOq2PBwAzP1v(2srkHIzHHZqI1k@1#x9ZtixP&KO^i{JWv0}j00;t?}^ z8|^YC$s$H`!8Eppr#BK?bH#*IMg$0A(IxzZV-e+u)%@ixV6)i^3VM1vfWXwo4OP1v zY=ipwA(N>$FAu#7J8KC2=kLaTmblM#M}z{#U6_)!Dv=LZ_vwzMlou&nx@HK=gn|IH z&QUKT5SMPTPGN7&l%mjY5j*V(Y_?0Bpo7{u%8H@F(iK5_Fk*@P>V$2gj+4fPclnDF-D(8sO*@0kG*8-yQCYj`Pq6aB~=WzwqeC)mW?kefZPWrA~Ae1xmT@ZM2wnTnX8-ETkK|{vf%@hUKmg>N;EIHQB zR|6^+fZO|20w_Hly*s64_HeZ&$V+2*TI0`55L!_?1FEKUX9L-R;n>D1Y)%Qx5hL^s z8gLNAY{&tn_2VFxB_p7`;c9wuf>m-D1G&Tz^06Zc%X$N6%2%MsFvL|5Zd8x~;Sk1Z zaEoNmB*xCWR0BVWFtomWB#kUgHD&-?#brgY@P%#Kh2R9K@nTB-qOKJKQe)+UGLtDz z!4~Ede!42MaFp-06WA7;*#A0kpG|1J;Or)-%C=xU?TM)ropEpFnBjui&dsZ8B4`pr z3Q}_v3T-Jy5;3x$Ip~_KX|GR6HqR*6Oxkb2?jU4gKA{Nj;|LJRqKq#x?wpeo>Mq)5=R*El)+5`p4nh>7L1LW60*W;I!~!E++9 z@H-U=7n#kpNh%t+rl?y;Q6)%BmItK9tVx3>FQuBBY)>3r1%5v*mE0bv$3iP6lTh*! z$%6D^A(@L_jQ%pS=u-3GVzP@}h-Oy!s&Je2^&d3g z&7hL6W>r?Jo7E&xu$UQV-P(acx)40&P%yT|D5IT>S7fL+?%t^r zsz$P`85yNGQzNNXG(|KYRMx>zo0>%IGqd& zmUra-IgWSb6K_;drU{Nf=~AaFNM||)s4sd;N5V87sR+mC=spR33kuXD9Yq_CRng>Q z`0jA#7j1OMnX&6GH0g98-#Q@Mh%CFVETEMhAw)-LHPacwdsvBxIO3xWi5?VF*w0E< zCnfO|;fWLz0P_rpM0)LUo32_bkUD!RiPhP^`o442u!QTrL4F(0Xbrk1Zre{Yg2N&D zf!=1LEw5E*Z|LP)3=W5jPq@@xXaJZN95gD$K((h(h47M>D0_lfJJp>YA-qtYyY7;2 zO0144r}A-|+MX`A{UTp#>^kezh~zih#BRd}!J%0Gm%D?sF}hBj=w_0{xzj1fs2#V_Cxj z%CC#qW@zW7Zm_q%QRAPL#1YE*y`A5FJZx5VUS9ei_|ac^ew!a=*Z1>&$Fr1U@I)Cm zRu}GvqSf8qxf?v+aP+>M{BA5JxV>tV{U@H~2kQUCv&?h6`SsPk-TsL)cwKxGJ#V2o zw~j4($FukyZHQ}_|1DYfcfZW-_I=vie0t2|eCtM}#5~jote;O)-EF7-Py6Sci0(J; zzYb~Qj>~zV*AcWksF558qalr>qhDj0d0?O57Qg#g@+R~5cKSXAE3=FkDlE z?)nXPaJDzl3aF#xy=?g-N!>tAe}F}^lnQ5^o< zK$P0wfcb(sRiGKiGv}Xj*6UkaZXU)frmwh|M~vBuBM~{Tt3;NyF-q>0q3joPPp8qt& zmA92L1;Y!YiXQLhIcY4A|k z=r7{9D|v2f>biiT%HxQHH;k@kgoW8U_7CJ_4&Gp>N1e2G~`4#Uoy~VA>A|)(~gsh9JS|oTj4x>nEN3E9RFPPFm~EHsdMcoI{`87 zQ@l=lq425S++s#+Fmvo6H^;Gccd!S2ycu4Ut9=`5Z#3tSR*tufrJInQ8&Yf7CxFWm zlg4+tO>G-#XMAHsT+quzHsgGx%PItT#TCaap*^C176r%016Fa?u%CiO{xd1Mr`xc! z=~gc`pv#q~+fMg!ZGV<^_~|w0rnxYjQJy)Y)>H%RZCWlxLX+i;lWKptrak*v=MuB# z{&ID%YN~&@>X{=Oxh*IL!9FCk!cT+(WHZ{-ybgq|Udf8@0THO2zg|B|ytx(mHv*Nl zM~5O+v50PYK3PG$qZtOueB&4MR0lt#`jY}()0wEys+Xfx3c@~JVe;Xh`S}gJKWQBC z-w>BXVDBmY-Ac;U;_#U=6ri{yZcaO&@#he$9RLX_7MyTL!~)TIpa)_Tm(vb@jLa>s z&{eHTpSdzXnUU%|=296IA=^6PaqM^SjhLIi^IiQKY7)(RS;Av$I9{l%-`^Y5PC7$)95US{HE;Kjiaf)U{?Wsk&GCYFNY(dg&y=<$3Jk#vGoPS4L<|hA>n`-#mlrLTwq!~n~O7-I}%OVy}w!M$p*FY4Wbf?TSOFcA68#7LS_cS3~1 zft30MA1)yr;X*)_o`tWBqqQsy!*{V^7Y7$I!zX`uVOTg^8Ef4jRYiv^Qc2TNilrq^Wub^J)vxx= zgJ#F$XlW$Gn_3^xWq zOaNcTFmRz|768YOT0pdB@YF!kLIxY4HlgZBWRsz6R}PGwMA90@(2&fL2CoMy+BnCV znRs9|ERI6N6D>ws8rl(IVn`D}Hh<{LT_!xpL48}u-!k&xI-zcxzJM@RNi|TMQX(=m zSn?9t`_gDS_!5-6rZ2U>0=UJ&y2ky|T7l3U9eZ-M8C z7}#ijkhqt>BvI-P+Rg_4iL@Mo2_Jhvt2-9_N1XwKNOCNQW>F1#Ew6sE0>rQt*_je46P2A za6f-!ouJ0pQ$_kQF2OiuAZc>}2%9lBTTgzMLMjo(%B`Y1f)})zi@^%8?Fl~~Nx>kE z!RjuCKw%^Gk5Y;jWw5G0DYG1t(g@I>b6Of*Y2I~hfK|c_j&{gIw-I2|lQrURVT%zas96 z=U25nD1qrcif~xERGKL(x-D~L3Qw&m{muKUjOaS!9C(OfxZ5w|KpGI7l#W3|F<)ijIWoBo+`<= zGYV)1*>m4(zifWdP_5@FaDIYN;|rmqZw?MfKSWyH*a%&qg{I3G;2BruGF~005Im8` zwmUT0-_Fxk$J6F*u08=E5g-E41L1kKUW3?lI?h2-?Uuqkxlp2GCy_r|FlDJN z`D>3LP33Kc)U6?dC3Db@S<;n$s7f4<>%;L4Ql`p!b?9?K-@mad(KPMPnjh|uOCKTu z&Ygc|(5wg#-f02@;yO^2lL0MeGwevG0G}YIGtV_tRTiha$AD&;h4qYEub06fx8N*H zJzYl~$ls48;DxGZiWHj-Z~`W1<7P%SxFoi0%YYciRpt#l@hE8297HJI?9DG7 zIPk2jHPa!XxU+wL=ItYbI`4RRniykk3);B|;DNfpX*1ceSHdXm6OXuv<0}@hI*CjF z(@6FS(|k^X1*m1CGgpanhQYCGjY#Djog-U)O&&u}A#m4g6maS2nsbE1wRYxXX>tCm ztr1SKO`-vnO>W5tEkI=x*S_nOpC>+9GP&E%OrHA#RL%>GMK~PGQPDTG@83s$vn~@S zu%cr?ex&$?KW}i`Pad;!Sm#s?4g~; zR25UKpBYX}z3bA1hWPbuU9X>ioBK2%tzBHbzEDj0UxKyZ9qRi#`+Fbi6Z~m4*x2&r z9C82kdu-mhjt0xymR^I4xK_3(_Ny~=NE}|kpPrZT%^yu}tDE1RSf1*Q@a(tw3QX11 zs#7C#45D%j#{JSpI+2Fq+?pE%gwXv(0Y*S*D%V2)u(g6qZK4KI5$F zRr8OW1Xa6u#)%mHw>wDu-5o^69p>>zm8t0WVe>`>&6~&y7wDzwX6w_8zqxN>Ja13snB1`$NEd4(wlvwvBzIUi`{msh1&q?Zck4~XPs5%z@&J^$UY@_$? zo+m(CwMBi$0`e|R z8y1vtu81j|3R?x8&h@v8#=I5f|2ro6!dN<11Z^HN0`Y&)`g%cIS|r@rZ{GZtK>Yt~ z!tJ#Et2$)oG|?no)D#gA|L016cL#DRvraT~?fI>=ecF02WCLb8ofQU_pG=(sC4Ydq zS0#mG0V9oj#W&Vj$}Acdx2S)p{3{c6c5PeTRj$$xO>=^TXx>O?ISYkyKn5JXaL(@F zyUP8WKg&E=(*-!4h-ds|?dQ(Ze`Pgk=XHyQshnz{ldW%v|Fb=yfv&lCusX|Ny?>Q_ z+6&hJFk6?kA0z^eY?c;WfZGp*ZC%_}6wCt7w)UTeY`W$fR&M^*ne%6_8>|$oFBMj~ zrjKRjbC_TL7P1|-gVVLFqse67T%D~vP;~4b)2I0^^NL$$TRd`zFc@fXL3yUW7qW4Y z)``TPmrvNW4|d$<=B7hz0~N&s3@kg8odRq@J*GX@zYHHU4zx*gb|&_4I;R181qF-( zc@?9Hayo(aWZ|Ey5B{@rF`NGC1oclo(e0YXk7*XnNhgcse4`f()9<$pS>nbMOIln& z2b;;+E6W>e=O+`7fs0!vWwYG(C-LihMI7)(xcqWgPXcRjqG@-mDP~?!T@Li(=OCU? zE~f>(Yf1GcrX4~7@MGblDnP4vem+QOjDN#4{174nnfLDo+y8_{{y&prZ0{k5|1Xts zGFFcbP|$k&2CjQmT_I3VvMSFJ>V?s93rEO=tiv#U&F zX9RB@pawy~!xTE0n~E4( z;z;&!!D5SM<#7kgPlBv`_BpF53Ft;22#$r|F{GeRC%B6bJO-`DL=&`E2_j$6pZO3{ zkxvobPPnQn4WBeQ152K@>XT_JFBUzDp*qI6N-V7<{}!u zMct5h^MusQ%WnzWM(7fzW`J8LO<&wi9_!Ys;rOnQBI{Z;)po12!Swc65%v%vHFRT+ zK)tk#VWFJ0m|>wyb{Z;JyVSz6;;~&2nz@}yJ(7#lw;d(F$bUuSSqwE$R*LqkQ?>6u;khLl2GJy zX6@0Q;>w&qTqtV}4t*r6v?;)=(S=UhbX2GybVNL~OQ!}OXdOzOnDKuKL{`z%0ALb~kV)1%= z_hb1k8P?D1&-3^B!``=FH+RRUdHydq_fOkB&#$k(FlB1f#%f<)NgjR#EYM1)CBwE* z9!D!XP&N9{NplrN*B`XU(~IJcia+$TwgQUUo=IXgK11-!HwIf7>e!9QSDZcfIIL?e z>Zv)hUzzm`LyfjD-R2YW{ZV(c2K{wX%Utk0MtFK22RlbyaM$7;NG(tB_%AO8Kf;sX z7pd-T57##fm$5!U&S97cm?YbX8$|mIS$b#r6t%SwA4asm&$i++A7o|Q9ErQg@^fA5 zhEFkF%q{k`U`;2&TIE5mS~`H%Y72yRJ~ak1P;aIyZ2PJI86zoXX}x0`3JZuPBeRJ1 z8<(UJyRM$N*E`_0U#P1YX>Vod3tHkjxXKRS7iYCN$ewr+cG+UG2Sl}v>BP#*sabc& z!fu!*?~lhE*(tBawm4~JLG7;lN&+<8eEKFnXp%!@`x4Q?%h5Dq$JG-%(7df`)WS0z;qE$LHq$MKeP;JYShSHiocn)Wc%PJ z`art^_CjzjcfhB1Kx^Z*4*iPA330%MU7!OEq1zQvVfT25!~Uq3$2f%Elo?oN*7Y+y zg0G*5xuxbmG~{RCcYEkb8CvX5T(gZ0>(|oV1bKzpp?mx5h&)LEf*GzFDbv5ZlKv-r zTR<@TZ_Eq}6DRZkUoflInU32RL$>Iq3}AtxZ{i3YkbNtEZ5B#|Ko>VOPuEgn1~YYg zsPAN)l0SelA`&7?w~U@0@R$v{9vBtq3kps5PWsJ31En3}oF(-?S;lndqDQUj!!@n=$E?FK<&;o@{j(eN|Pk3>$T&Ehmwd^KVU z)w4}YhAy)C%|lc+bafDDsCD;a+`~3O4M?L)Mo7{FDdkW6m9 zDLmB!6WTQDnpk)g$!^OyvS|+jM9d8z>=OPeusD1F$PhGVPmeRkm=M|`8B7LaCN@YC zY0BsXUrSIU0iwwy%#z3&1({A;|BEG4Jx(E6ezy@X)fOdap&79MnPLOCHNESkxZpFuq*~F6Ce>;_}-Gk&ssR{qJtRqru!rMLhle=_+XBsa1=36%W z7vdBN1cIpHn=%lwEiu8S_!X=|u~^cENr^2auX9uhlTR``vm)&1XCnJ_owl< zo`5H!Wf@}B`+(>i64P4RpK1#e)@S%i&MwloSdrB(h^Nq??f7&OP%lxyxB4nJ4Ad#0 z1QZ2*5}lqEn!tj$BWT2|5C|B8L@}xGL_?;-mLo1KY0yAJu8A)U&;LpQ7C|sLViP1y zezR7dNVg%xRFLjrr#_l8C(>b^65jM{I3LTBjyr`HXpb|}_oOR?AT)%BZ%A51q7zpa zX)@LNILjQRDHXv|%G9mtX$k^|`-B#Mgyx3*e;E7bAWOb3+wQV$+qP}n=u($$cGbhmV`pv{lyondzn=kH;6Fcu8D>HURW}b8Q-fM{yHS1f6lXwJe`R@C=#J-~7 zS`kR-e6ko+uvI22${Yg!1_8*p)cGCG+lPmKsHe=Lt)X(pp`ZHp;l}1vvv@%pV`qd4 zk}^fp2yz0jtVXdoCQm`(AaYq(C1U4-bwrx;GbuR~?2JfsDOw>l=vo78F%*r!c5-E~ zaM#H8v6xroO@QnZ=Y#{|h`;LM?Ij6lE-8l4~dBYDP_lF^|C?(Gof1R&^qqvP}kugb4n`@==IG@w1^C`87o84z2nrVptmq z|Jw3Lg{`5~2(ZojMH+2DqmdRCR>>v@9uDbYnQ3o~OdQN~u&*DG5M*WehcWts;KFiXHL|JL+a2x5wSs(Mikgs=u$6H4HdL zqMokaNWJirg5I`Hce|stZN1mSbf2+1;Q7}0>AAu)!Iu9)Woh`6*{pz@hO}}>uztzK z!5LT0JjuT@!XGCXusD483Y&?zKeW(Nvy*lq%IOJ{%mAW_bRpUK%N87G``Xlw?Kpsh zT@{b#GxAP-S`ltv_>$FVoKw0)Fv-=q=KNJ>O3AP2PHJck4%&<5%6YRDDlMI$fpcgS zRHfz;FX!@7H>=a}y;Y0I4P&=~&)Nv^%k&EeUS~=hEG|%9vp)SmLSB72`(?eMrbZv~ z(!LaL11!dL^5f?E+@u*rTni~>-YjMN?coV;>%)xL%DeNSD#iAErf!R8p6+Dz9FIBk zV7+a;V78T}y6f-o+@XeUo6m=xgOiiynQLPkkW^VkON{H|;&7qY+uii`SYY?Sm)^*k zjT?CJH9-_q;1#1XkRsUy0>nXvxZpDLM;(tOoYai0OLa~G2+|ux{NVsb+%+R#f?;c` zV~ThQrip9tougx7orxMNM^&>Aobh?kAoxf*S_VPXb(B=jJs;$X_(&A;tnDI1m?q|u**rXS6SGpSGIQ-|oj?xu*rpNAt>DvkL}k%N z>rlOTV%fxRs;2RFJXM8JHEb@G7x3ljDlJKS>@oo^c8L=(Ng#=u zr{5w~y;dc_TMiIqJpRpc;C6`nn*z&wFxJ*^LiG6+C_&9^;Pb}q6VB`4#=JIhX9 zoe=hV1bNwBUS`6RTcJt$-BnYd=8ktp`fWpJ5B-#-C3&+9N)uP=3J9Jm3H?-0?ZQbl z#au1tmf^zKW&SeJ1XGk!NcofLYx+7FmZXz-yFwGn{xv*M*0SX15eO$>_1R=X8_GhB z|6tcuO^JSECwR3PUOx0w>&pw*85AaKuNQh> zvE>eGjh)kgP7sybl&Q4wJUQQXghw=SB|NR@qwPS9k#5SZYvV2z>P&OoESIuJH0bUZ z`Hz1bFU)ReZQ6E4NjUMdNsoRu0!fvLXw7COGrURkFnBs-0dxfFQR=dF)bNsS%qg`G z&o2w?0&~Y;fx09b3i?LjdIP5yt(Up|*QLRp)rIbqJ}CWDzsD z7=Wgnw2i|UL8y=lGf%opv1CQVgF0)ws%-q>=``riR!}+G`ePEke&7^ zfdX?o?7XB;F20vXhdy(6DzNF+b&KY1O1=j!dlF!{MG$JCieXF2sIlMuV!Au&0eH~y z*b1fyyk*}!YlyD$&+F;fp6!q^@Qa{41Y&=eRG$}2&%|W7>X%mDygSKV7+9Go#w@+>RG?{LyxMkc=0XjTrX)m15xgk-7{AWKdOJ2EkJPt(x* z5BFn~lhm)O2+SS_o1I_tV`ZwdE_SN6});6 z%ga=301FaexUXuXW@o)*+X8S3drM*OQJB{t7RF2*HBX_)BegjG`SN}kR38YlCE z=@fOH$2Qd;xsaFC(?>!t6@M?Sg5^~lyTtkXdy_04NDu=dh-DLdC@QI!7>r%AJ<($R zNFKa~&1L`lv%_orNU+9n9wr7!;Z5lj&)fFvq^RId?(zKb^IUl4vy@)er{f`HfSdni zO&ZzzY>Hm*?QQ7_Dun@{YvUTf3Wa$4|mbyry?Yl({4)%t?|&huq9Q4+`EFuSKg zYwpTjAXd=6A_ZR1K4Z+LGRGhJf%4Yd=@)$9*=x&{s99+kGT}58V}?kUR^3m=;fR?# zc~%7Rj;CvWzGq)>(!w~=Uazq&8hINLblC+tibiRn4wC;EvYcP>oRX*0iw?h;z5tgu zC1Z4(nqTz2KbY8jQvcPe=HH`=XJ!AdGC*b~mj8tWqf&dy7FQj$BuRsSrmjMS4F+3< zig3sCnjJPtiBC%6&FXzVaNI@KaI;<3A|F9pG9bPg3W*{V>?aZuL?Fm{c#oefA~af% z>=0TWK`fQKa#0}#<4HEN<2D9=PfFSw+t^$uXOH9c%kvhuB$m`a~!ycMb+srpdw(+d@5eVkAcYORzA z;-4|Y^2Wy(wWwhhH~IYPMn;-+DQyT6Efgb?In{L&e1*x1S})*qh=(pSqWCwnvUy45 zR54`A`ci6z%Hlkr*>sTrqPJYy;lcV-s@n8S5uDmEuUQNhbPZayT}lWn+W-N@*<1yg z!r+VG(Fu^oWSTa(VkW5uGewwS5p~R~G3MJ;*j;QPlSrb0RD2_#Ffr9(F0JCZB>PS% znAX4RaiOi*utxr}KbZXTSP5ex16t?)c7 zMXB-)7$YY6@lK4Vav=TH9}p~RveR<7#1-e=1+5v)(qZGP4gCU(ww?a77>F>db;vbQ zmC`!RKrCpVm6w;xsi^_=6D31}!eKkV+`q07N=Kmd0$n+HOR5zSdj-2+)B?gU0vZ_k z{PY)(;(mo0ttOKnEJo7r??r}L+OzHC-XxJR7J<%Tu$kLX8qPV4iHqF>Ywqd*zi?OXdKQmZGcd=)+NRWU#X-O@ZdXa>Q0O`iYWJ%l%6KNk5 zD-@=$z*O+Pl>|dS&xrI1Mig6PW9ldM2!9gn)oG{N8}sBI2{a#37E5SRgb1X@S`WQu zTTzR(+c5d;|1#WeI%WZKff%QZjeOQxc_Qcr8(I-grX=^h3KJQ#XG!a!T_W5?O?<)2 z_={VEdjaO2fPrB({Ip2=i`j?7@W&xUBJWOuHR<4S6^C->SWK(emCcKMJscL=!_*0kV-QfA4|Pe4NpfL~Hk9 z`L*PjZ}4#^_xsa#$W6#&^s`FCTeAk1o@XLGdlI;l5cFxQshmy+10x@|v;D`{BKn*i zx1%s}g{#%qqATVTc^jSX`_qrEqmBUlk8@l0KX3i-8T>D=A<%#DeQF&K&TaMh>)D?+ zvFShW+L9tRsAGIwJ_qX;Dol#AwRpM(1ZuU;0k7K9pNq%yHToSb?5=@7nSSExNKM>$vm{6O;_4MvPZRpbnvwC~*<|2qfG5wUpM= z!ap_a*mqrhkAaly^+5JvtS3&1_Q;W6DukF`F6OMw6)fh+?YX$kPM_{v$rj4*`X6@K!SK*o=lVU84mFLqfydecsvh zjCm6k|2Xazl37pA{*0mA9>G56?Mo`PtAkX&Lv%CrJWKbtU(iu{5V~8 zGFP)bxg&lX`}5}TO^Z!g2;htV`Q)}{r_1B@*v{4Nt^biaX6JQv?axY5DwMSnDcBNt z5L30YV4GR&JT7V-s${sNG^05s8SPMEP~@-0A6g`4oTIpRyG3YDRVC8WSHj`UmC1Xo zMQD>2Wkzj_SjVs~YCdg-JvLhts@ZL>7X=_^(1fUYfrcZ~d=B0bxrT&^WQi)52+RU1 zK>~w66rTk1$b#cxfeS|jJ#Y#~2%B^B4%iU$mM><80T=KluezF=&)ewdX6#Ymq+Zz8 z^eFQZ1z9_#E^b;1=C5qF>zz~fpZr^pn#}zhVyo*CWKqWRfysyk!x(9?J?S1%e5GuA zb}(IyGVoR2MR#{4@;Te@<7IE09kLE@`F{rl@nexE&Ue%3W%&<~K5G2xBQ9TDi8XODEH5Gzl8--?vqFHZ} zo{k|9pnlRLhf}&(KGXeN6C!Y)LX4(%F|)OKxd!l)GU!97^;8Dkam}1OWnqJ;XWu^qCN0Fk36x@bSakfJE51=Z z{xP1jB$<<(f_8q?lQ{lcN9Irzil|B7i0t$cYjVl9QOUMn8@suO?i7|}M__eHDaM$h zA3%4U^Y{d|Rm<5X*}vsO%LR9OmeM>O1**mI=J06@5YU|Kf|mEOHs@Kw<#w<9NE6cK zH_=(~s!+(T*2t`$bmoaP=hHle6&t{)3D>m^}OTk;+Iw|H;&r0P{ZN z`vSFUempV%0w4;qTgl~E@wT(NVnVY-{dDFBv+5Qrr7o2JW%KF!d_Dc=Syc$2DP-U8 zPbY`blcB{k?!66j=LxKKMd>4sV)4z^Lv05CYsB>JHhu5KvI=@Oir&~5nyEhMaTINM znuOfj#=x?R?kK>bIs_}ko<%n3k);V%Req2>xQ1WaCIkrg{+aq)V~u8^=B; zX+J?>Kt_<>u`G$@QLx{1j)+bsH1SKdhUqWO`4^0X`PR zwqS0Bs}1ueP>?n%OYur+LjE#@g2k}}$l|eK#G`|V#`_RVx*%zE{xax-#SsYWSJyf% zK7Sv;&b?Y{JA5pdZgqhh~QfD+qsPj;IIHA^z{Zq`i+ zR;iy8Z$a)Qw;_zOKp10zD8@5-tZn-k!Bz2NVx?uo!j!JjtOs}`WRs}yvu=r7r+rb> zY1(u=4*!(RD{{F>t!p&4xQi^?*q7-^UEOB12X!VhLX540h#V%mtKJ&b82q+U#S4zO zPKm3N0b~4Dyf5Rq|Mfvab1LLlXv$oZu^y-@S z?$`1XQ%oa+6Wocf!_dW1IuJ)x^j3i16P=J6b!)0d)#(p^tzCi)c-;J#Q3FPN=-QWf zBU`>cLjY=u;U&#jnqW@wuESgjVY~k^FnT9Dd3c(FY~L@q^yIPRGaMkFQiH8HK+>oKpy-h zYA?|o=L-bgNH8#hODv4sR4}kZBCOO|BIzXXHI+g$2+c{AMH)J$Qgl*m(+9&9YL*&f z>7mYe+5~q}?Z3xKD5TUqshKQF?y(<`b?F!p$iYrO-5F&;<~2@L1@gh~+ntdFV^K-M zeB;wDeH9->;)&8w3N=O*UrhR@B+)}Ta(&%FTZ{qz!nT*S6tozr5-3It2}6xpVJJ=| zS!tq4dgvtd#b<<|A;umElmyyC`P7Go&>-w_?x5_R04N(eFg32IinOi-e^eQX!e3Wt zjEc3Cqq`JZA%$Nc#T1kg?c!OKM*hZ@CMb2Q>ofxiiTY=hbG>Op?7U7xVA6yIGj;NWGXl!FF#G|<0@%H$Hk%q=6yCa* zXN-al{+INR-EoG3QvpML2c9u#Ei?EzG;ne`nYcMN{5&t8$Fk4|&9#e2&5Z-n$qykZ z8sh4}-cDb00Z9TK`rhQ}=xg0b`IfFNe5?2_X`Z)CRju=bkgv_PvuJ1={kgO-8E?8` zy3+=tDX!IUaH=$fD%5Jw;O0Ec1)4FpSwXC7?hSc(;3f6TY*OjzFUMTNPk$yvM zjK)CPD=@Z1?qxl*S-rJF-g@N{+unzW0yeo;TAHSyqh&aO)I6us^5AldQd-b*HC5Kc zzJ4xJjS>)QJT;!dIEG&N%z)2bUxqNbM{9#TQY&-)pTL3#>eE!Yu#UYx3pjTChYVLm zQ?tX6%|VLV7%f3X&9$2dF4Cgbo0d0m?9T5NTe}*xY?LcGdX>sy&QxV`q)TOmTuCY= z@x#jIs5*bB9O+4A5>BUA(Zpa4TB7A=u6aAX?=J7BVs_ppyLwt0-jZvRU(E1Ud%keL z+Gkw5bw9h`bv{2Ih9*j8;J^6pLvE*z)l8Z}c`mPz-*S6SN& z%cZL=4!_04{u%Hp;@m{rSuJ3?u*^lnER9iXX(O@v#c=TwF~CThfppdOKXUZn^J>k> zDybL_(NL`UVpPzPWtHJpJXucSh*FCw^Y2f%04Q)Q`8t#GcL%hQx%0;_k_I>#>Vwq= zgiDZ;4|K`rx-?4_Vp#CzchvEfdl0W3a!@rRRd1{$%|U{~tE6@O&w#O)t&WbK&V{VD zoX_V4{w%qlF~@u5>wdrUVVJXm)8x=`Z+dh~rtTL`a=wGHp{X#t2vjaKt}1~!tfcv~ zaZk-6r{^GcqGeuv^x5G=poI^IxZox}%5~wjj0e(RVexaZFELYOW40Iq(H8%=sPsQGhOs*(# zgA%u!d-g3&x6Y6DW4ev@>DgixMr?;ncni}~imfA!-2cPO%%{-MQ|F|jdqG9&nY zZ~rfvhn3p8k=d$<#jqHV*!SUs+s_Wbs7g<~{Ej{lNIpWj$vzufws~y2Zw*)Vw7M%= z>lO>eKxKu6fkP6lz9KdZIv8Dy>29JdpP;N3GBU8}A_?iKsdffHLc%MY%sXk_8#XO( zSq+|Z(>^<%zmIvC0hxeo&Wp;wdFI%r))m;+#FE8~S_vRg_U~1ew~Fyzz~TJRupq)n z(F;_PXBiSRluOSD67#Zl?^WhR7s}0wRfLXESVdZBx&@I(g58QPxy-o`?*djR7#Sj4 zY~y*_k}4D)9zQ<2mjD-rCPBjB;ouFAvaj~j!GD4%4liyjb z3!;cj#PT2x(P=YPo*^wpbTU$L|q{SXzu##k}iiHCZH14I{jf`h$f% z6OAfYlK_j13GO+|8WX%0RxEB8*bKov9rTwAOguQbZ*6U`ui>G*QGib@H^v`s2?7}? zuTULv^(se}$vjs4XU#@5-}j-@wcfeG5i6%c^t>Q64b0yK^EAU?EaWM+*bL!`?n}P7 zp;$w`@Tp(~^9&-unZ(F=Shts$WDp>55#p9{x+CTGv@;x}+4C$kyRP8}$^8|?c?rjc z7?M=z1kXydbF4`Afyyi|zF)7&NqMq2nuCabd(wL1($~2w-KvMcSa-DY5C=ET(lbOl zdVpFpY<>x?`O)+|L zW*NP8y{EYn_P{jDxs=1cBuFqtOau{uDiV^BvOm62$NT=4q#F7`gCix_S^QWwgy<#G zilA)^Xv5tQAVZiLT>{d;Rn-1uVVR@&WXYHC19f68hLX#-AgX0LM5+`|@01%9)dULF zF*XD~jK?S){lUy9HiH%0wvIN6lOO8PNJ8w|6n+xul&>XwndI=pB%i+5HV&;U{pW`y zie$1(zBCA(erS`s)vFZ{b@Ptc`X|{w*Fe$FuF&h>ZL}Ro=-Emd{3&Ay| zTZM*x{JWoHprTThB7{=r*>wJ8iRPLy@=Sjz&``&d=laeSpeSyBN~=(gKnT}k)13Jk zvn!nglXS#c6Hfj5G`stGp>ICqLsU-DKns&KKgs3WAk29SFjIHz`WYWJpKKIrRluSE z`(ql&q&WyRW+8ux(7ocGU_hsS;xeGo*TFa^&e86?5d$bbnu)_Gey)0shWILX^7EG@ zg%QhHpTr)}N<4fjErsJ|oJZo%Xkv#Lp(jl_==_t`XJd8-HNG|2$Od^A;t_O6i9IdZ z=2$-z2iA#nHRU_l1|XA1SV@V!agpZOphR31qU2aZJtBX#(RCg++M(#b;`b;HWH0y$ zTLKwi#uAC(5240|v2+yju^VP;l=r< zlhVc`Q^rVe7t)MDkP;^%hP}U?pR$q2%I8GeWLP7KlhyIJTRYti?xoFr&JmA1;(EK; z99uqZv8TGN_nI`sCbjm--9XXC;AZkSR_528mCU0J=yL{U<9gmsAm1+nzeVG1aI&JegNXtIL-(=}88;h?M4UM5E7%@qwDZXtt5 z=bTxmzsx~@oqruIj$NI2pugTs?%bdIFd0b`(y1$Y zn081_IG2w$s>8L(p&}+UuH|;D@1EC}=%(D4qT=Xt?rQn2v?KjwB>{rx%hbU~c_WyR zBKSqedW0Y$XRZ$Ehlk`Jk|R;Q0pmv-l+4JKo|Il5#I#s`Eae0c#f z-?u-bu?|q>%{YphrB>Qu1=LjDNogB_9-$sBo$b!o)=CxB(q4&;sTTPd7e@{faTl_4 zVDf7gT_56L$U&@Wr4=rxO@Ne(Y?W83q{am0BVz;7Cc#iNV{uR+QUYy)*satAS-*tu zu};oKuiEUSi6u5Gs%PBGV4$`E^e;yHM(PoYZcXe*ZIDby>ZG7TXVjT)YC6{2bV~G> z?Fw~S=EehLdI~$u`{Sl)eeQT)+!BxuDTe`v9hqC%Qd)HHvh`gfCAi>uUsDpn;GO_R zCf4bshl0#Q19JoV^hZNW*rFgLiuB^t`{{GqCpNdwpF>m6W!Y|tHFkH)*CO2Pe}5* z5IWJZ?u9n>LN}ygcvO&F`3xD;o^1g)-{gogDEz*l*%r11T%KZ#yIa6g2T^JPvz!OvWTJ5WNnu+v)AhcbQwd=*)Jv z*RIB9noe%M1U}p^OVg8r*LBrB6J+9( z1GVXqs?3;@YLnzbzQf7Q@ig~yjb$7AW_jzvmUkVh?UcQ?hrAKVnDWH{?WnRBqgtc$ z(beU%4JEeN)E)V%>cyOdm2?YnPWPO4@3+UXxHS0b&sZGXR`Zo{*-{r|VwvoRW|{5R z4?y9fDmCxZaWu9kJ*}6mS8$54(gpRBlI*%de$cqImV}y?M44g^DP>J*#l-P!j>os2 znd-QWdzi%H2BS4W1*kd!KjikWmHgF+q> ziVH!BCk~s^865Noc%e3Ql^$}5!}5p$oOBCI9~zA3uWJh0RKc2GPJs8#zL&I5zb=l? zbzcp?pCS%K?%zAtX-fiFYXnhN-(`(<#2w)~E{^o>3aPW{?Itv>QlcqnF|yW!Tlz%# zjp(Znf7|eL+#Y9HD4#5kOiCZ?H{!G04$|b&#K~?_pEs|4?zpYT<+mAM&fd>sxgSuE z=d;~iY;OWU##V#xwObtZVI{5$R@@{?M7O5h>*|X)*zn~hlF8QN4Y*(Qw5zGhIBEV&@0_AFLP1Zdy8p1A(Vfj6_ue`Q>q zd3Y}NS+7j-b(~B)osl$kDY3J+bjcJ2Wpsms~5#LmKT zL}7gSrMMOAv=E zNSTvrL?`Ww-${s3>TsC*-v``F#qZT~_0csrKy8PhYAb}ZSM^m;ex$BZz0E}kG;NkD zKz^4pl@);ku#kQ69b&V(OCbTdr`26+imv=gmRL z--)&yW5qByFsX5!?SzozIK;7d31o3&i{ad~`z53irZ=W0=VswxqgsKR6P70^+x4_A z_U1ii4W=*pmj*&AF1=DpL4YA~1EpXl?J!`lCSU002vDU3QlA$Gw@&CDzmlok(zY4U zIB-Qz0>@S&p=RT$$#$JcwOllaF1M|*7R?|v%sb?JNgC0_=iyTAGrIQfZ#;6)Paf=(ym#le#rzu` zd9Lad+*)+F=^ zZ{t`#rod*8vMJdrFH8s?6lTFEG=;kCy6diNL)zAmXOf-6f%Xvve&@IA8Jg(Aos{N= zJKjt~W!a~@DLXBS)%j;|^LOFWE#V`Vt>a9A3**n zu}P%0`;eG+2dbDROX*TduNJbV2or1lr zHPsnb7sv{!4W~@gcM?04wtaO+_`Z%H5UwWtoM50$YjRu01p$t^8V0JTZO6pzPYe>%ULA^BD+kA{_ z?kHC-nIsWv%4RG{w;hTuVvh_hrQtX~cOqAiwqIm66*bRrD>rmsWq6iHSa2Y}!e2~M z9W;vNoWcyI9SW{kzyMM4DfpDYj4l>O#2I`|kcxI>F?DA%k05^;RunwenKf*5O7aC8 zh19PQMxjB{Ke+T8q8%FYXRVm74yc+d)ljFcg${HTi>n46v_+*D=Q*7QPgp{_TYO`) zreV&aWc8RNt?(4Tb3KyC1yC0S^-(QZS8TX{aFxlgDiW*6el1*(wlM!;J@p7=>h3U# z{X#LgqS%a4B12deS3dv+Szi;q-4lBBl z(z2Yd5}!^)Te!d4fTpORa1(V`V2J{>V5)YL#I%UjyXYBdpC@VhrJC^r&^Zc3)igzJ#t(fFZ~7#pSjo|WLz6z*wHRC3%8-*y4|dEY5h7qs%yAMS!ZOtRdfsEN5yuxQG&{DXi)$_L!&<7r$huq7&msH<#Ps zHgg}_^z9!82}mg% zbloqi65y{d+=n{2dpO#*|ADE<)0YBpfih>>GAhCwAv3Yh>H=aI1tKXO~(nf zghX|z*Kp{yLnHF`t3lZY`^wz{RSl-ge;FjnBv=0~P=(Qsy`dEfmZV*GL;V)9Lev}L ztTAK(t!NoDBUYo)j-BX}(w!QvzdmJ;tH6Z)JG6d;jd=|Ga3Zx#?;B0>t3$0G@o@0N^J(iW`4( zzbC+FwHZ&J%2~>mFS$)OWtbe7i#a`Wty|p>?>$SrU$jj+a9Y_C(Vmkm9zv(a0fGV; zARyODm_eGsVwfR+nI!bU#-Md%^;WNi8DIwfvB+~j_Xv5?p47M=$j9a(^C|A}pwD zNcP)xbJzU>T=cT}-`}$C<__S$o>Tr^pRKh=F^V8T%?w4@+Wepk=GahY)KG@6`$r;wirH=JZs@dPfHeg3x&Nllu2)6FBs=I+L2ILV zYt%wJomkyWwKb5bMR-a9^~e;5rZMr;typCm`hKuTimFA)24AjX5#zElOAM&QVYY)a z9{0~%;COogC_!e9d;7*J$7=CiGE+IXgjX50yDd|M5z z^&i~G3NjpYnbZ*wKf7F-yUv0mE6Rv%;f5+dlXW2-5@=W24NUxZJ&}93iuvKlu(}i1Y@%9Nsn+M8=G##O=@UR7YMQ%FSU?NrqXv49=3O+ysOZrVv^Xo88h3v6 zzV70{EQz3xcu>t?YW-;YM3N=gv6N6N;xZkGbA+6iM;ca+b-mwV0BZgQ&NswPJlOtm z;`&3QR}amgg2s#s7WErgQR6>=yFj8nAqN=+5#SSt-iv?CVUPQJz&C9n?!HIwS`3ob zE1YXJGk?Cj^oFM5`W5I!H*fqDS&yi|*ME}sQ&%#^PIR(wVz?1g|7h=2MYC_9DPBOR z|Bm)r$wPfEBb51l>|bcM?z@hrCYob)Qn#g>XKH;nS6Xdg;!Po)ca-ISB9i0AZusG| zWlt|&KQ;6M8U(A}^LF!+RT63);PBoU1JK_mpRqEDYaaJ6SwP5;6OK0c2mRM3AZX@m zXYZ+IC(ioj{T23YY4m19v}Wu{PLvOp5*{*G<OuUMOj#R)nhZ@GMi$R3MmF+p* zxq|k}dXpu(k>GmmJ?)qSu%F>>T6Y}dXt-5pJeix7!3aw>P||9oQP#>mN=3UbGaa65 z_|bC^gPzG5mIKw7Df&y}3Y7?Y$Uk4c4;=j242z*jXn~2aeFGO+385IAdDg!-u%0eG zo;eRUJ^=^<`yMnSDCty&iUF8N;`SJZ7t~g7UilV{#qL_3Dsr1~22xGwMX>izIvK4H;AOn@4wHfOry|9S z<3L!z(l0J1SZ4pg`eaN=M1K{A@(#3mMOQ?i04D*Rkv@{&0^=HnVB?r42$O#7@-Hy( zkx!u)z1j@M{$iPj5i)KB$ONFE1jSK{W*)N=N{2>j6cMkl&zO=|f+oV4M}1v&qlB-G zC>rn+I3pTvz4myj@V>j0eMYz-LJ+mYZku3*I3*zP$((t&sl6Z$zG!X?Wx=^5IE>IZ z<*JTRWQi4G#Xqt9ncbcdJb{vweNCnzwV<~%;jPR{nY`?;hl9!zt}-0o_^^1@u=$z1 z9Nhkx6k_(bjZ-v(!EF`kVP-|{2{$O3>+~?_a<6%YYZMJee^{Koq2!|{eRJoJ~ zAVRc*5OVJ7LQ&okk;H{HuAA%kaBO+4@;IJLneK{N?ihExSRGx|Jq~W%zU@5kjo0Yo z^?axSVE$z3jLW1%{!+nAjU!_<*I2fm*OeYME;C*;ZZj_GBDzZA(InCgMW+-ZR;^*e z+0tA6JFHG_Bfnta9LH6?G7v5z7wSJxCNNSXr@w(v%Jvshc|I+rWp{nu6Muz$yyh?Q z$hpWi3ZL|e#=|eb+KXos@{*uTc}bRE-J6lMP|H!#oFrBPWz>~ox{b82XVHbq_w-lc zYKlGvu1U*w@lnL@-0L$3@HFa2Pdvi~4wwi;VTw~)K;+3#HoaLZ8UwH6V<25;B)xrh z&1Uxr4~c;vOFPB3UIV8T4{5hnD3xKc2*~#`jpb?(b;d+FqE(%NQ3^;Z>yz5SR}(dm zT!5xdZSoHD9#D3C8?D;vzp6Vct5~=iPJ;eXTSi9pV3|aRoP?FcG$yrPR+uG~k^tr1 z>T@b0x;Bx0qnUKAQnY-(66M=`QB%FSL>wXaE$>97X+{Q^Sizg2sk~wPrY{t)Tce@> zlM1=acD{>a&R3nrhAVT4|zgfJw2zBFjdi-@TzqQ^9&ja_8tdOQ}4dKQ`)0!Z116a z+SO~_4p})#W2ac%yO0q~TL!xI*+vSHXWlO81J|d6A8yhqC`<g5uepzpfWXZt5Q z!N%M5VCFpGn3+hE8?k35;t4_zJF6>7d?{|acRqn=h~#DlvhZ{O(qifL+QRa<0sTTk z`DpxI`r#4@D5-~4H{D+cYx6(t6uLMvK7pIAZE3npl}B}sN@wh4lsJ4$gfo(|?} zq&q|5)d*giv}!(r1UZxzjJFrDxLGXxk-BYf;9W5o*-`6!Qt07`X$l&*#ZO9a^50Yi zzO{#+|LUvz@5m-FF|ly|S1kk+=YJHj{eRTJzMFcYb;S|UG!Y>o>x@?>Y6TYlEUDs( zBEtC%A{a8`4M`vyMO|gY{)(r-D;R@RtAghDUmkaKVU!sR3OTvrQ$rCyiLs$V zWT~|woIwnEg5R-jb}B?9e`)d}5)vXYp{YO$3=lig<|xWW%~XakW=LNs%sA^pxd=K? zQ2h6lWtduYIHdJ}lD_wq!R>~bAQ|MTe}+PA7v-1v?;=@L`_55Z{1CI;vmz=`&EoN$ zzypoiV>T5KapF8@;p9x~LaD1Souk}7svMU3RacIIJ0e-E89yOPu2MgNp=u1V$YB@B z)$Z;#GG&<&&%Q!G-h-w4@M|AqbDRvQ;1dWv|6ESsEbo(d8TWHkJ zF`Co>g?bDl*woP>MKF=NUQ&=iF5f8CDKcbui=>}AibDYy6_@xazM(KE3bRySv|?!r z04^$X?Mr1fqbdG}ygP<$u&>+fkU9fI%>3KR^wB>9lExR`lL~pQF}65XtVQ;sDFtkFyc2&`mygyC4s*@apf#w_y!_EQUo^d~ta0Gjv;JmWhY zSerycKg;a5oYkZB6EQNQw&S*MdapM3-&xqe_CKLP&{0$L5$o(+rwmibd%aRL?TV>o z5hBU5FtEI=i&jOhv$rkXT2I^dOc_TIVR3#l0#)gXM`1g%-7bP=O(br(#bekXHB>4e zdV%4U8nv1_vW}z zy-Rnt64vUNz*yS*QR-sw1{OM=JoXN-mg+du6r4K1hWx-nwz@zrwOzG~IL5@LvnVnc z5G93R(@}a<9w1HpyJ$zw#=t9duLXVS9x52&XFgr;kcJKGO7{?j4Lu?1AXv|IzS%ZW zTX{6}-6E<2T}!)(m`G@S7A;Dti%sY8;XNQayTh&n_4*bpO#&!~ZLz>z4%Ti8S!^cp zobt4`bO00zWPs8y&10<(6BbfvWR{b)Bu_FOFnQlUwT&S;9z##G(c;oD+W^%t9XRMK zX27;c;H5!-%T8v^+DYDRk5d*l+jKv!&qX!6?)AF4dfgu=Z_U;6Tp5v3Zrs#IcDg!c zyn!y{nQwi@s>5P>IGvnk6(rE}ZQyKie!ZU!0PuOX-_IXbFhyWPs)2qJ9~`AG8(Zw9NIm zv@)cic`+Y=a1AIP-Z|m>7D=prx;m=qwtv4`_zLI5VkB>b6N6D*H9F0T;d?of6K=ut zntXHhKT$QltYY_ZdhdL)-RgF~_{?CJvk3(__roxtL9bMz^f2Ya^KtPHc^Xnx%0+*r z{~yNAF-VqfTi3nX_G){zZQHhO+qP}nt8Lr1ZQJhK-??$_iSuLMy`$cmQI(OAku@`B z<(xUjcptRzezP#;e!5CY33LewF{EPVqS=N63sH&Lh90M)qR5g#b>j+(dH(>j)2u&x z=?ybXg+ylRXG}#PpSJ4pmB|pw#X&=J{+%X;4FptZ)%a9=bN*&d>fWF2Jf5%fJX~+X zl|KfAH;0q!UqrR-O}S3_w3+7}`rT{R`ESvyO~R`q30CDvR!S4=n@^U{tX7@XU1ELo zr$Of{gnBlB1xFu)4G4T~%}aEfgnC-%b3oT_35=hn#G}>EQp{r4-fmA)1$Udx%-?5* z#Wje0Ba(Il;Wr2$kn{nUFTJKP!WOjZ0kas9OS%oz&iJ6r0*iC>CKZ4Y>yGCrEu8FSy)?&5eDbft>*UT_o7TbmDE zfD)bEJ?UODj}!)NTto{s>|7kED;O$ki($q16!Is!&C-{*d%R6L6KV83GUm@M?lu&{ zE%YRsWaDqrp>Fa6MS8s5FhIera108Ltk7u3ZB8Lq*|fQhI+-?>bQiSsB+#|e?zeSY zex!+N$VU*HM&>%mM;Ro6L2@@BEB3&##+Yw%t4VX$afzNqQf0tSWP615OK_xZvg=ZQbJR`*LVv+o8ED60l$vVfyh&6b_Ix;I8NUhmC19USeSc5aPho|+;?*1roM zo{lbNafR-W*FGJ|$fdW(NPZfUbyYJx)T*IY6Hp4GUaQ)(Z*)z`eQm3unTBXD4> z7Q}I>V-u(E2G&JB=}GtaM(8WFuhHKP+JfIrqVff68{47Z>SKgJW80&j5=8Q!h467r zn$9J|Hmwo=5w2TgMi+XMsP%lCFJdFxUxe7~QcX)t?l@uUWGqbqd(@S!hCbWP#fdt} zIy=_l%5aFkq<7reJGy&DnbzK5WGPqIc>tY*J@uxfq=ODAf<<+^I5$;a8f&^n3Ezo8`NHq`y9@l?Hqx+&f`bxA7OCq@ZHz zUO=pRGP_?+u;Kc+w`2QUKb_us5Ar!ZeXsUxdEJ-sz7GSOX>3)m9#rbIfgY`HC?1g1 z8;FEQvgGr(;Q7)rzS z44~&B?d=OdoN$4!F=feG1556d>ZwaWT=?npPvdLgnu`7uTG(}NxJxCiWGht(jNr*j z9Xa>SWTT8F!2OyyJ&(pj5RxJjwypzT#mIwoii2_$)ik8Cokeo!%Ji8sh{~DSGq_`u zy1IR9cb%Z!Oow)DRP9s{>CeL8ue!DD0RxPn$SM-Ay^i*TCn&&BYhsI*6xatRH-3LdgEsmz}HCc2mx>OVKZq~NT@x17l4LH z8{iOl9Z#^C#^l*3TeRA1ZBz91Qg!%}LB#TU8D8@VX5MOci*HHR$J zUs_p{RomFIS~qRO=5CTOLknY}Yk$8SBw}RKL`;_h?)(Biiqu;ie_Vyg%(a=>Fe1dT z<kItj_UIoO@%pbO{{JD=hxY$X{8|28HGjiD6aQuy z&^tgc5UP10I>bi-a#0{ctC>QcT0KlYzYONofrN))DgPDFcqJ7r$5pUXAjd_il+6dC zH*hWDPeB~BXomeXip|j>;;GI95jk8kdq?Y0{Mh@do$nLE@>tCgVk416MRIE5cZ_yq zNyL;?#WLyyb9nB&e0f_TRU-S$d~x3!b2#Oq(%&bGPg39u2#Hj_9AJDW!<)VZrNt6b|TPr6P!l4E|dzbmijDMM8A+rKTSy&OE;E<<* zH;|VlkHp11G4eB#DA)tD{?>R91xkbz)UeSPp(9mC47HRgFEGTPz{x*RXc1qx-Zz}nL$HId{)19x;&k+6`$Gk^P^8p2sbXYedbXp&NGYe6(P>K-MU`aGNG>ZjS z+@8(@i9t}=1+rAm@-_&2&xT-TAXV0vxWZi3vZ9H(CB1_U0+C2(ks(@FMY%mwlb=*+ z0^Ta7wv$X)0SL)paqy?sB>t~b3Ny*C#5$`AfXWpV$Qjl$I91ENvZ0z1vG{y^s2)@W zAay2}p2Ld(HTcjW&tLcJ!MwnOcPQMc6SFT+-!%bGjBOokVYY`CmuA7Hg_VPc`V_*9 z_GIC~Qqz`d;OxdrqVZtq1BC=LXT*S&;aT@fKn<{cKC2+pu?L#=5D;jBb zwndGho%2szFjeIBe`~aO%GQ!mw1N*7B$~?PO{``EPKxr9;t3^o2SUn|ucHpsE*l~8 zkMq6qk`hR!LkEua6dstT4b%$${zD#KSDi#Mb%f5?ax(R284pDZ(;VWy7?iQL(GQYR zToCYg3kEHUZ=#ApDbb$OF+`)Fzcm#87-C{*pgMseg)kL@JOM!#w)5b^06xT}nUERG z8IXCHp|U|wB7bYhCbR>~g8jtuZ;FIJ6 ztx7WzN{NyzS>z2D62Wym_GH*mR&)Eu{lP?BqP!Tuo zDvtxXA~x-Z%9`S3*o^QYRqPfY)fn2 zv%NVVB%4lSQlG2&&linigq&bjoqP#z+Y+tc2Wtdy*|apSIPCPLu2x7XR|%^QAyh*| z|ADeE_xy31emWYS&d%X+bG%)wSLuFzs{ZzR$vJ*)mZAB&-G%$0;Ng59#6Q~3+_WJ= za^2!$ZT}`aYbbrWx!6TL&dK6>dy9yu51H=r{JO1g&e8lhjbhPeJX;V~tG$Z|Xq0|g zTVm%k4=$v;4bOUSZneKokjd8Obg<#}{x}?*FR5nx{tYXAyiqWnlf`2PN4*wu{c|eb zv)p&u*vFH0u`hv##(=Krh#vDt0##w^~_!KJ1C^u;Wcd z&3?kXbu82>Do-c9FnD^^n$>dN$3$bIlLst94v%OUXr`JVLR!)bd}gqWGy(bL;@FIn zes}bw=}p;{ibuTX^rY-F*?$NXa_KaSULtaByuMz}F(1H&_jg>euwwpv(qG!<=NNcw zAWd^}Gt)O(Ox98#t;74gAs%idP)x~D{{Ui7)Ezt{oGhnE)z~WB_3lrNiG%QAybD&7`QROR+5@uMx=K!Lwd59WJ(-%{!s3t1 zRHsOqJlDLFwgwJQe`@tVrcy|HNjZ!bBIwVA&>!;$kg~p4KV7c9UamB3&N1HDVo~33 zY`VOz8;wIh!-CUQ%to#|ty5?i|V#i`#lfs!Btiqfg!u_8q+`-zNE~Kx;mm7nv4Me)4uzN!$-7__D zsDg>8gNPa|;+(Pf#y@ayE(n}!F+iuiz|OD;HwS4kKb)@`p$^1|gL(_?%K7yQ1$XeH z>bW8V0zV$NmRrr9E}xwcydaj*($S4i1v$JpBT3%phgW2#x8JuL3oP6IsN83@nHN~H z%@#-5QwS#}@27{6W{cLHgRbUmaE?4V=G*q|orfc6e2ff?^W@@k4Iy5>fvjDHT4Nf7 z3Fps?Ub9Y3vPzGCV)q>#M^Loq)s}o-;$70jpIJqDwg0^W@qbZ8BsF~)&%I1)u2Mbb zHA8Rc#A_iNq6JG&=8J&hQZdK`q8iWLqw#9pgAR7g1fTrCW=v(cm@(v&%ReV&qetnIlIsiEy%vhgz1 zr)-t&=h?l&-Wamqp zaH)+|FNnCO7wh;*n!MHm9-IA3C0X>03}0Im^XS86(3K1}*ksX_0 zEVT)$E$PIQbF94&-iLn*1SMtDegDJ@Tvz-md*bYQ%fC2PFba_#}`ax1-E0kq*^ivstS<1nVhNb`l z`ld;@{JU7Ws)s!&q60lBOd2o*NS&d6R@MbT8sU~eSj=jkJu>A&K;G(qFh&5~xh164 zELN}xdPq$Wdh`|ie$kGumQsSSWx(&Ys)9yV@xnEku41uT6u9p8CJ%tZHCe7m!8Ki^ z^?4jN7>DR4&hxSOxzrH8=*YtTO(Go!_v`h*yBgg*9ej20Q?*bN)c?Kj(#B2QP*fTzbq5WHv9rBo`8fcS{uRa32+o2 zF+5cN0kJ+68AQJ+^|w$ztr;(b4xq-8WF~JMk$`QF1sNKa0N3~`0O=^duB;CnsYwmUw54s2$RGU~%)v}e_OMB^skeb*q>5nw z0eE+Yk|0L!61Mx$e8^y+K`K3ePe_QrVso*)V!u^cCG=3hrw}6nZ#fVlq5XN)xQ!$Z z6hwJ31!_Q8eO~WQ&OTRnpT3SBUN7?9EgT&X?@J1pa3DYxjJz6}LU@gXF$^T_5&qa4~sx>=E3`rqPK zY@%&zbl1vxiWcAZKHli@t@3(p(USvNCTZEbIE@noWWs@HdM%HnDyIYpp^8DCnY zL=V~;G_-cs^Kc2VJJa8Jrb21uSYKxoC=LhD|6VL?WB1flRm6$*XlnI_6w^kImI$oQ z!HX>aiPIi|%T0jNy!I9VunSQSRNT%IswJg14% zifwT+oF23M@~u|QwdG}3$GJ#QqJE$lk!k)7qP}DISEqGe|1fNjB6#TJD!$0uN#u%h z>{+_-;w|D$3H#M~>}s#rn@Qxc5y||Czy7$+#PM%+46%;HKt?!uR&@-mPQ+k0efe1M zAV%(D1Xd-VL*B~qn{TE~B2<)pt&lZ=g*s~MAhSmC$x?p+O$s^2wWr@BCGI#&4z|v_ zZD)F#V0$yy=D3v}T^k!^BbpZuGKyupN$_B*o9bJe31<>%Z$xXP|L$3W%&kqwTXA2@|~?_|EUt%8D6AQ>L5F~0d`<5vt7lr zNku>1(k|M$ZKPSQNk`OHvQd=Gg{y>%oR4%< z@O`b*eN=UqcVo2l*P2^O_ZeD+=k??5WlFb?hsE*a=Jt?=#02^h_W#xW<}f+hxbLKEx4Uj# z4KZrj=HQu{FgcoFbHGl`4MK*M1m0ytkS4v1t(ya{K;Ah? zQzi{$WgLSf6vEu4;;APP6+;dMh$AJ*Hy(o`0*Zj(Co>6)G>yV{{u4wW{t|^aCXQ&s z7@tju_6OP3yB89fcL|-Bo|M4OEW1)9j@+=dl*;($t?u3{o=3EnCQ8&0Zy3EO>Q0>C zq8il5kEtC4l1D`|!cO>yZ0OPAL&gw(O)VKS=&1ve*DCwN=2s(#l>JYmjhWkIIx5O* zMMsaRtLdx!OB!wPwg-$DGc1B>jaEaDeolcTD9`uL-$1dBu!TNfLaQmf(d+?QwBaMx zg(Es*Y+ui?3J~E{oEecOZnq*dwb)@#0}}f=7~? z-NTOd$RPM6bDaXk$K~WR>;C@L$R?DmH#5ub9lq9q|MN9SGCv%C1TItw6B`0b+xI{T z4~x%858^6&gq04V> z@GXQeIDPM54yxwFRPk|Q@Y=uX*>)TCm}3mR@xg&1c%oE6DC1PAIoE+n=YYB+K>FK1 z0L{mf^+s>_=)=|ki@CvRF`eXH;?xBPO z6CJ|_06{t+D=>P+h_T}@xCJ@cL$-yiN&`d}P)hCfijeW;YxyWcN!6&8qe@v(RB7{# zTfu`$)zFp#Oe66Tq4dj2!yZJ1i337ogM<)TeRZLQ9u(!~Z4k1A3C+i&`9lXyQw6O= zk-~nBaz?2ad|QU2g0WS`52?-IutQ|g)XD~iqYZTf>P%5$bLS36$oPI^k! zZSc1&VP0zv6FV&$L=c~$JHY)mW?QUCXLjlrDNLvEYg#x03aq$Y52au_Ii4;$pES9% z@3;!2Z_au{kSzX?q`;bldV!2P*Khe7F`5+W8!;P0yw^e&`CS0btT{~>fcwPQ@(E^1FrP-?Au@kHq+vY_QjN{(r7xwx{lQ*pA` zJGrxQI=!tqJ8K%<^o-8`KHgHq@NC%@jMK-AQ_b4CTT2zHC%xvZsCs?Eesr0}q}82_ z1)Ez+Sj`H;VZOm|^=l;+Qdc1Sfht-9+=KNkPlKB z3{!J^ZBA!uu2))dHpKDZnC@#;FmW+(V6u!LexzQhcVuxyP=J@SaRQ-W8BEfvC$?B< z%NSa(*N3YJQEsBnRL70dS!c(?5nHn==*%c+?Y5!S@GXL>k>qP2Gc$l(k^GfG#>*s> zP1T|NsCh8&AYz;nGchBtRj;_L_m@hIr5OxNEcTj=6kW)l-zUPG^=p3hom*4u!|}Ft zpJvPpH5s-dY91&a_c}fg?;Z1PH0WBVBXeRi8$&9}hLPF73_%Kju}B)-RH-Bj7~AXg zA`Kg4GTR$HM!H!A-QDFWEC<>Jc;RLQaCHkA%D{ZH&knOwWKXh_LL4-GW&ZcfrmybR`D<(AlA- zzfN>mCAcv;>fN-`JYr(OEWd}&xX0m`n<;9ICz~LT~Uu54{XZtGTM%_Fcd5298)dLp*@VQ#ibhMFP<|j zgRQwBcpK$8;TcyUn=<5eDv@PGrJ{Y$iy60IZ()xk91T)#FCd4sdRr(?Q4J;F0M6}-sQxR=y>n=7O?B;GHe zxIN8sy!gUtjyZK=_twpJo}!I+osMp^q)oRLYFF8rOZ7Ak#!rR>nlACTJDKcVtfOYe zJk1~5*7rQKWcaZ)D(s1r^K)w;PNHiDW33H^d?A&)9;+uRXD&$dG=5X4$e88M$R@;V z-th!xX$T}KVJWu<@*3AaTylDxCvAV6RZe@mU0l{vHm;7@~V^f!XLga&MJE!8G2tBzSv-o_Y7M1w#iln-V#PF_-ZCd@FA zM%7I%v)PIzUXz_2Jv{-5NuOBEogX(3RfncU)oWy6o}cee5;8uqSbz6<75o52Iv&jc zd2rF1OO9w@y*&@-ZVFtwxNom^dM`sru?=O6fOU(?3gN+?%_D1#HA3w7p$;KY#+)ch z?<7-94uxSP19)r7WTmM5#k#v0$YZY30nM1%$ZBSha8f@_GTus)> zZbTcFo6FL(rrue6eN_7lfUCW(UtAwmPkx<0Tq{i7f&`2;{#A$B?_Uzt>*m8PY2P~o z1VASS%=5}?Bqj|Mi6`Ek}xvzrT`EhgSq8?Yz1>$g! zD-6koYZ)`bCq_*=2_iZ5d3gjVIXu!jVN!0B9UKzf*d6v4#mT|L^}DZEEY7kk>MsiE znof^n!kp*L+$}T0Jj8uy_ufj-;swqTJs7YGxn&x-KLs9XJs)WRDJc@+Kbj{XMS{N( z%BJZs3I$2PS3Vp(s!hvj>IV5$VqQ!8T@TmwvJEnC~ zz}Z{_n|A8+ng z3AKJC5rZ>y7!$%T!^hBHA|`!d1&>2d>zJ^v7Cm?KwOfFSyy-HI@jH>wh!V1k>Gzu4 zOf$^AHN{@L_i+Ply{Dt|QCbP8p=Z5MyXtYy;624S1x*E2wM|7Pn;7DwmcK8EeYMd%WrLqs zNz-7{yr!Vr%)&_VD3#oq*ZS9%Z?mdyd^y&F=VcHVY~1YnT~_DQ{tM&U%jE93E8u+p zG|59_ej7Wb1=XwC+On!?sB6*Q_PC4qnTiIwi>0NjgVv{#3FHbtq3Qm%H6q359nSpB z9a8b?K|&*j@z1_?@@>Py;s}0WavH-xm*}FCs1>Aqh2UAf99R;^Dh9^0-LdyqANNxt zp^nEHeCZQbONiV)=DI?}w}t)H-r*{r2jd2AkoYzc8o5G*fJ$+T^jS75qZ6y8@Ly?V zcRjgYJ~38B7yRnyV}XHF1B>_Jki)Lka+0mh>^A$;hrT z*EEgG%fH(j4u^%jUiJ|Ene3e}?p8rvHCSIA%7w zf3t+skc!k&iBtYDL;XuMU@Yv4vLOl{gdW#*+HvlwI1tyV?5eWs zlGEk6y`=L*QG5GdDT`gl>$tzj9f};r5(N4wgnSWKVZv zQ}|Z>A-U~cW_3;SF@KPDc7#%$K3`INWY5?F!ir=Pozn=h9$J8Y`j{&Gyz-En_fqSa z>oEAkJg~tkv>~w@o-#2($X+fz`~aa1X@bK6mD@ydwb@W|h+OW{!be53A-h|T(h`PS zPeR(kysVlHD=01nrn#H%9BMqC?AIM|ecDK(9&#ASjw_Ixz_bI@0Zbec%7{k%OhC0J zHX2Ld7&-*KAU$0jM3RFve2x89XxfP26UzA*$oRCdLaSrz$_!H8YLvT>oE0*33wl=KQzAG$pA(0s4*d| zNc68!OmSi|hhKc~Kd0+@pT5L@AjlI{;hEnnyf=AootoadNy{X1N!2cz2t(6=8gCDs z_FFDAbswk-egta(W3>&!0W?l!8_c2mH5cl~C>?&~PD$J~68{KAvc7 z->)(t@(3)T)O5*Sregn}c=8$~xWCk0FkVi4GcuarO0YcZLC(Yo^#}Jg=+Fn!x zp_;K%wuF6l4iS}@cAbEx7@xdUm>51Cpd7xD*ckCC3L{*stzV#kr39%P9+g-a6t<{@ zC{OA*uOa?A9jF^qV{Nomid8YgjC$Iduv_p!x%J*3A^Z#_fKbumC%)`acXUHJQAJS> z5FW#BH|+W>FF(mYhB~C25UVQTahI`!OXDl4RtJW%Y;urX!(!q3k&SnrC?*Kpp=w!0 zO@5{#F;K9-nH7D>E5lB>5RKa4#DW&r7Ak$>$j1Cb3WGA?vDp} z45BKS4y=0XHjL+`~Ac)DFvt{;qts9z*nO~IvKP}Di+k9PTvqe%@-m*-qYhEdmL(Z$_I z5*rX_qt1z=`yZQ-0ui%PvlGVQWmo|JV2f@h8QhMaCo~$|&fz+QMZ1~stFH}WsJxw( zq8Xi-ETb7Klhh+L8s$?@tCtBXT|nrA}^MCoN29swBHwUT<#yknl(&HKfw%JNUPQ z89E+b6m8mGNs~kz zz2(x^SKf^UCrds5Vt3x1gJSSYp7P3ujU(RR2+YxXTQCWJmezMPwSB3b1bUe4KkxQ@TzTVY{t6L`r>NoX8Icuj7beqe zm4}|vY(rt~aPWD3qe&rw)=+=6NEl5jM?Do0zCSGLW<>isSNS@-hx?)3IG)VCqc0!_ zcq!mgvs1sheqZj-Uws|!Io{v5`MGUYbcBa5PmY}*p*jlAAoQYI z8@ZH}UsrvZKBg&5JIJedab&81cUbptIS1;Z%vkdS+=KU?JeYEFvhSU&lP7FU$wV%e zr{t_}q-t)adhV)$N_x%JQnep1>2NiDEUn2TPtA0L>AY{xuDjK5uZ_TU)DWNQbk%y( zzC%0JP9HWWdpljND~9=`Q&VoMVr;%`o`h6?`u0kFKQ0!esEj`UwJoxnrpRLbXu9*7 z9`hOC)^B+WI1d;I0~ddg6@O?rKHbhTUZd3Ux<}9(e^fDyoAxn5bK}00!&~rDyMOL> zdo@B>frtDFNJW3PpxnLZk{5adVkQ>znPE5$=6ef-lIO{RFrTfI8t@JKQzfg*`%+a# zS>=Vil9jfLR&XFg-{ZDfa-}R$e{PPw{OyGd*%lY;0j%w`b2gywvNcOMWM1P&UrpYn z(NSmT)8O1PH#cK5i_y511kEHEIQ=seAOZ(1u@Z{7&m+t6|UX1PAtnD<$3 zYu$dEYP`#vLLB&#$bATre_L-&**PIo4<>O1z0@N^xmXxa=uL}C3POsJLaoYjbG?~5 zncWSr+Ph2fmOBUyD(?@+Qs_=pNEQR_eNr%-DWEK!^RL1?%R^BzlT*S_Dv}$A{SEi? zq9N0k?CKLn>Sn=^`+tDo}pCqHW8vFf8ZK{Y`druMBSb;hP1S z2GXDr)ZzxWUy#&KDL)gA{BUq_)<|Jt!a}l-N>eSRT7dT;Hu6JjzkX56$ks6IQH5@~ ztDV2b{MbJkP3cPLew0SlR`vLzvHm<}@}~JE3%=dK1waX#&}~`a^?u|ddFA=|9sK=t z1XMnKz!Dmn4LK{5?Yeg}HhX(pL=tVxSrJjN`SNv)^Rm_*<1L4)`U)?QzLn&w4xy?J z(PcxV>rvI~RT_Bv8j(W5?YSf#evBe) zEGy48hhKaU|IpH?R8iZF?G%Z9kS>!f@O@%zmjrzTW!UNSd0eHsJD$km|;r4j?(>Y$$?v%IL^HIVl@sB2XB`kMe(TWO$Lp{HTGK6`ax_cYl zkBqmc8UK>?YzWcWe8?FDQ4!@pG-SkIe-0gvge6e!lc)tFHc1PN{tC>K&k?kYq1;bx zqXv$@R2DTiR|r*xh`j8a7$W;jtZ|Qm{vR1ZyK{kQEIYgl>npH~C15%oWo0jAhhd{k z1Fl64I&7q5;lRM*;^Jb%5_xXBKNc}EJDntiKMxSA*214(J+uxc#Z+?NKct1o@VM>0 z-NSv}FK>U`RIbkl^}0HGJZjkib}mb|BloQJH3n>1EQ`lpdJWs%pAD^|4y#OAYp!&# zWm{U#gvn1O6iW|6&9q*RfVDb9V7SpaMn36#L zx5Te>EvSTM&v|dy`Ky8Weng|gOQWNEepl37b7<4|3c9;+f9%urKoh^#l>NR{B;pqq zMC(!#(2YPyDro<-5hUf;x0k!cDj34P3Q-Kz4;JD>AtGlWk866A=uGPOqw_16dOVl; zlun(BEG%s7Xc&Sg=W^WKcUB(eL- zi4uo`ab@}Sto5S0!eB26^NSqCqIR0X_VQziGi7cKyW1|xoWn7BT-DFDo$qD1J15@x z#}pgII&K-%IxfO4`8=9cfpy_-HoX=iHR>u?gn%mzdsL_I&y$tUG8$Wz!85_N&(@TYvW$UXQxiHKJ4zm+)5}11*5~p@eP;X`z zW|kAL?fEA0>Ia*4at{IK2b*_N6KT&Fn=e=x?~gMVkV(}1Su7Az6UFLl+~a8s+YXKJ->{u;n^u#C$2iw@b(b9%m%^&6&Kgq? z{R?&)@4yq*ik8au!<)a@y-)z0hgPshDqW^>pU3~Nd^aJ_Iy5)!>lh{VY0nGy2G&Jc1t8WP8Bbv?z6X0d!Rwo!Sl zN|hVVXK0;>wfTDZ-RuQZ*&A$Fv#*5$X?LJ=YEAu!tmUwk<1mtaH~3LalQ~;shdN(n=~9#KUZk$`PKj01H{+jQ z9PpFH+WnfF1}jf49U{uX!)I4Hl8>P69KVw~Ztg6;xjuX5eO%w{%$#TYy>)ipB8r(G zTZ(-)d9umD9o=i*O(Z-0%C5F)C&T(A1*mW<6jGctWG8cwFBG{=+26ecwmpWp8~b&s ze($%@nt@Kh4!Gd$OMY(IahT+_LdWZ}i&Uk_av0$|54W+^1Ehmo^aZ}w0a&5zZK#QA zsLezOEkp=4lqtHS`nm)8zHQ+?YEhqg_$)MsmfF0_ZQmAj?TcK>i+q{~uf;{bEkg4Z z%qdWxogzJUM67XyZT1f}9b9#SQ*bS|`S6aM7;&Qksd)pkFH*{4mKf#&R%=fjJ zRNr!IZ(3_Fnx)d2HqG-u(E?y9Gj#l`CGCI0bNgTX0%oRvo8>ZY^IHiG6$Lb5h{rc- zc!1Q%VfsBUaHN1#-KP3kTSFB8_xRzWdRP;1{x4jnI7UzuaaA+T)1iS%%uO^Wi+l=H zV$h`)bAlo5?)$8?ePm7vE(=man#hGG6Dzr@57g-}jk#GC6$6d;Y!&u0Kgs106r}rf;0Yz^h=DdaO+ov?-<>+%0^~?LoU;?V~ zz0gO5jvb8!`SUB75e-iPaS_kDN+1=~)u|L+F$^=>9A!kZG(D*7^}z$&ka=O!KS4S# zok?&;md)Z9h9Zy(2vnm3vaanW9YLTV!*EzEK8G|fQeYkH>HDuuyBUmh{Iq!htrz5l zNZ4urbQraeJ@AmuLsBC8mVHv76H@*kg90{wKEf2xJVN;zfZx1GXt_v9kkB*X>Z*Y# zZSi!0u(=Pv*h>F4sN#clCu9!^$U1;drs9R`Bg2lBqX~iD$k6>kFwaMH=|LK_(!I&D znQ=M_jaOwE-bF5j$21W%^W)|nRop`dW7?OE3P`^OhU1$gg2odhdxJ7jR=~{VXxjfQn!NBi#}LSeIO){6*`8ZIcu&aOK;34RQQJ;VKr2Li!q9H{WM%I1MF>6jQI*Kl65Q6(t!27|03>`!DPGp?cR2HVl&M| zrZHBPnXnjDuYH~k(kE7i$=UG*9Pu<*5LitT8|6Ypi*eKPRMIId>4;5P0}ey0rXha5 zY0*)F;;&M)Qdn7e`I&x2Q(YO^iu!2F8oyFe!Nv?$IiiwU?wAD4A2S=wI0L18^Ru$H zhdm=lr^WoXWF7i>7^}OACgsKs-o}SLqB&Kn@mg{@suonz$DUgCw14(LFH3*uGLd3Z zdNJm+tx(H06O3ybxX)kF7@p%ga}~71Y;TFu+8Cm?Hb}8H_%>n?q9nkP%glKFavEdd zy`Fl^TK0y78kf0k;EvvsX?}!vA!y6tdU6v?FiAnN4=dK@0NdVX&;db2@^m);hT8N1 zT3J4wcG5BPn4Uj9aRr%XIn@6euX>VM!jKDeCq#G}Mgjd)ex_){ z7LyW?@8GCSAC6}0BipT53cb6|o8yaz#s6L-6tdf)MUM*~5k?OA9n-|QcE?)L5-J+) zX?c5q{PJwDc$DmOootL>-{%lEc9dMj*vzhgdOt9+|?vYM9E1UiL)#i5X^@Ww^m3 z+G;UUPuEfN_Jn$UX<6O4T>beqd$99yF)>#;$P;2fG3?xEL$ldtXaBYl*L~vry?YuG z&CR6x{UH8sR!wCpU{!^DS2IM{;L?3ReaNHj^;47<@F>HLJH7E2GxljZ)0@%~1s@}R z*BF7R#P8dOK}zs({JPi_wDQ$TK_$0zKdrrczfGGr>oj0wALA~N%X>GaoX4GA40BE@ z#zgyS$(Sv)R&0y4>35@}7l?;u_>f^|Gr08rz|0U6F7C)h27tQvr+0 za#wq8LA{C4;}VK@=Ton3#rwdH#W#|8>JZ}B*Vk3#!_=B4NZJ*Nwhk zJ%h{6jKhAKi}BT0r()sDKW0K7DH*!|>fZLBuz7wE5C4;K!$A9QS*4pXKmQNI=07&C zHrzWv8DM`>V^_CvVep$kpqd=6U9Z6zvDusE&CJk)*Iq+~8j4PV3JZn)aPsEk)9pq0 z1oWn!l*=&F4Ut6B1cOBd$2x0zRMszNHaYN2vE9#oxEo(@+gvvKSX_EtZQN3u(G=cL zr;#>@p{r3v&V@$O(&5$hvA_LAnxYWYc6H5`gXeP-loOOsO01AtE#N61Uzmk5D|F9u}`R5zuH z>&5g%SU#qzSe<1gX$X2WJ_&M82L;aSBm^Cafg6YogoPD=%SB--1Cfn@*oVnYCICgp z3!0l(fO2bmSb!+_%?B5Y2y!trL$13yBn(YLsF&G~mXAE75Gx0vaEP^}4_HZX1jE1x zuprOW13`g(gxb_gF3x0Gp@eK0*=N3{?W!9!67DouPd5jIvM- zzgiOnMLJrOWT$k6;~O$$eZ|}(QQaXvGP5y!`O@*y_yG=K`~TQYgzoz4Mbe_ZjwvjK>WMWX;&^6)O& z0U6+>(dX;(@<>WvmkluWZCpX`{D9@yI3{>_NfHt7E zTws8g;u}Dm=~OUqOMWiwNO3^9AL^jAB(;Ky&w`FbQlXyK!GRu7CAYYdYL|bTYthjE zk_XZ|rT3**iEi-I_*NFv5gR-}SCHi_MAM%1wF>OlR}G_pp95eaPfoV|@<12>XGJU- zZ4<+f8Ep$YO85LYE>5f+MZ+XL0a8x%87Ztwzk@>uxG&}UFGM>C0PUk7{S6EZLMEIZr)P-HCY+66fwojLp`SKLA7O+tPMNGmS=YhJ zkU}HR>S27vh~+QJ#*mqok=AW%?PlEK?QLN8d75;nlI>YXxqLHMK}p!vw!7JD|1xnl z&VhKTp}x)9Mc@6=|0rT(_38NI{%6qhgCH;4ZQU8p z_PFk9B{@KKf9__HaQ(Xc8kAs>6LL{jdo$fR%--7i+OG1BOf*hG)a3|yx|^$g*(3Q3 z3aSJ%Ph)+$f3|t3vN934;$vHulg5j%>GzLz)YOlbn6R^BrG_0I+-+gSLJis9v;EoF zd8O80A8Z0Mjgig7Y2mtbQ?dKAL0C7c2g8pE&;ob~yaGY>PtAXAh+`tS7dncllG0e| z^~+n6%vfW;x%e~9!}HPbEOuQG6%t49T*%q%W^eboIA5ZY97pXGeN*It`d#n2hEEaQ+iqHqf`fPQ3?#7+SeHI zYte-(+#Tm5@@&iRQxb(!Ev$lVH4Xl~!I+&P=JBtBbnrAx*w6B|Gd4FmUla{@X-8ftx=M)!lvhP?T5k z+dWVM8=zoMpX&rpgpu2mhu92H)xnyn=+Cs+Zp6tFD?>M90wq{tI6sznf_<*Ix<1yo z7IEO8QSL``a`FN3g6JNom2>?AE{n{7fXdYo7uh^IpU~V}z8+-ngpiaSYdtQDSEPKS{uznux;`;2r z>wI6WwSSL!09{+#owj+Mk<>C#B zGT29Q7Rbi#wTe4QVq#6^bluN9^2n!g1-FuFv78oHNq&r_dR87@2r~XXJo&3J1$F-p zOM~5jsC+npXXySpjR*G+4vy&bRD1X!QrH4Md9)6?07e@bR4;zn5f;&-fQ zpOd=vQiqpib{JWVgniX2ukw1?<|se@@RiG*W4WL-AIfTAaLloCy(G>Pbp@W{i7aeY{&Fv zimIRkl07|O4Az37GJuPvou?s+CG|F(FQc7G8uF>R?J_bh3m=h6VdIMK`@3 zpVlxI+1Z#}4Xi&O)HBrO>hLt_Kdf-VbsPk>bZx&b1QXxNLBiG>nchZw{l8vbX5!vEJJ~wpavo>>4{vi#s;8T06JfI>qpl{zOId5h z;_Fxk?FJn;ST;EsGz%Vx2q18;`rdYb42c%0rQX)cg1t^=PCC4wjhU6G+0n2)seXb}B>+UwW_$!ZlwMjg04^;b$ zuvgn&fFDa3aOo@Phv5B8Oa@|RuyEOLrmy98s3kVQ3+gXRHnLZITXHKcOQDZoe*I}t zj;)#YmbDj)kMnVaVw2yt4l|FBwhjhuZ8nzws#6|~ZFhdHZp*3oTBjIyaJ-tQJ=WEdFV@hz z9cDkTg|`;{rdl-Dqr*Dt?4;fU@0xw0j2p5WLCPsYikZ#a88 zHkvOJctLezu@ksJXcmqS@Am!56@^e+w2pmp_LnZ1oC@LDsq+%-R2Qa-jX1OJ*%TQk zdTdoKji2yOTl;R|5%VoNdlGot0<9f~s0L*u9u9S+vq%oiYE;)Ie3@bj5(Cl13o0j3 z>6~LzzD1>)SNbq$j>AbGRa^7A5^CBwc1<316*gw71)ws5!M3JK(;#!la?zhrh$C_} zhlEP)Hkmix+*TyDe_Gc@%B-{=Q>Y?ys7A%_K86KJND8!uVSaFGNcVi3xMClD&gBerSBVf(GFU15(%g(m0dG$9kPX<>oihzR(dRFNJmi+ z>BT`V{E{7MQ4hgEZTA|?{g!seF%>6-u`aWa50!>ef6l`;<(;KMuY#mv($fv%VXvIe^XxoT%7+1v;I#KalrmK!ZtK0U$))&-8r7f z8glItBisbLFEX|^rF#7l4FK%wt;9=93b=W?AAzLfWNn1b?$clHzC4HOx=hoK(Wd(b z1d>Li8mlKSWanPvJ)V+dd22sJ4L?QMJ`SCBaV(4d-NBPH4k)C7#t&CuaL}E%=m$&G zn%mtKf^LeF9f3im&o&fo2;v}%a@b`h{my8D9u*oE1l*=vbn2(PGZs(I^-dU9b`%9n zBO5h3O-Fh(+g7Q%j(izgg|(%Y2BeL9jsxy&yHa6Uf8ae>vFD@zZr%Q_pYMy59PliC|HW~zeK z)?wM6j0xQHOOOeo;0%^9Z02rf#pjWR!Ho@R28&4(3Su4hl|e_uWt1)ST+(LN*aFXP z6akxqgh5a5KyO~`a{>ptnPeKF!kXrK(VsbT1U2HL$|-3;kY{Vl8?e)&CCrT#WyDAb zCy7bOD&zxzt>7^+X-ly`C7KmRu$8sZcSZEV!Ih(0T^|?ZtL8Czi@_3?*wY zj|6U|U>zyK3T2r|=?LwzQV#m>6xE76$kHg_*A%Qs_WTSsh3&~h4D%+XxQz;TN8?HI z_+$jwZTv_2A_Yzz5s(vX`e-7`2#(BTSDt;8RQ2rp0|_gkW~A5FFDY~6){qj>!34#L zfT&{CdCHD-rFp1b{ek;L*c#u762%TlVCWP!&4Gu)Ce(LQKy-GEotSw zDTX!6HPv{rW4MnryoS6fn+#;0Y*bX5jO_B!v3^ogRj7}&jI_MO2jL28b4bVd}&eEo`?9TjO!A^GL+(EK&EfNjNHc zQKdOn6v4SO!FTs{)lQ)`3`7)?_GNx|VoQ%TR#wjP{rOeo(->q>E z4i0T1uKbno$*@)V1)*_uZJFmTi_d;3Xp$&Qul6O(7$$P&+sJKRr4zh8W>30hSFwzV zI8A$sDI)gfAru0FeOha%)+4am|;FrU!>rr$dyo8$qG?PFxC z5sP*GBbL9@>G#|3N?t;}9#1!SuM6Xc`*Un)u5%~8C_^PiPo$c)K z7`g`VJ>pi7@COgeg!Ln@zc0!aIl~ASzwlYXwpr0^kU?F}E4eRZ&e+hfcUSac}hTwrInbaC|)nF zjMv3%BU4C>Rt#FIjh9PF6HS9K=D|&aFyes?!!L8-lXJI%_l{(#aqCp+>iL^mAa3O= zW7j5AY|d}G@wKi!x!tl{*(w|Ic~-#mypw$l=Isn`I+~>=?(;|hly2G)4WW&l{ni;vBP*R@<}KfQgJIo21wAQg^wlQqxbghM!Fr(aH+iPC7GAkFIyixO`Qy z^y90COVv4a${s5;2=&78n^ORpHb3OX7)Xc9ndHOk<>c+vz)xNoGpbu+bJ)b!{@B#u zJaH~uD-@Ajs}JFPU+T6&VMy;lD13PFILvtsu*qgx z8D7G#Z@t(7S(bYM)?XBk!NLf2>#=ohq-H%+38+F}s3d7q?3o5!b=SDzoStY_u50VfqJ0~tc zVP}A1)GXg@q^|)5+jZk*W8oW(FlVI(YbL+ktUb4}&8@iF>d^b zkbLIPze})ZY1O;f1aj92bk@0v?-a#Eh7w41)F$fdJYFz5!^W)y&*TCedCQ+iqGC0A z634mby?awMUc~LyYKi@q*q99sqVMeq_7B4hUb8_L4#YSV5~@8Vi`XZxz#J4=r-uu3 zJH>;b=N|VJ0jvN6mx`9M+g$EHv&^a7%&A70SL}3lsd~idv3iXVeBXM#)>;reEj3S2 zmw!rZi@F=ttbq|V+JtWf=*i*kJUd9_kW(x+$-(+XSh14hZ!Z^4d{e@?{zKh^qS?E$ z($uHbU0nT~tD==pgC9PUeu8S(yL!h2ka5qBAw{Nb7r>iyJ-!E6FO$P!q;hqwd z2~`5WbDJL34RSPmzUhvr`FRnCI zTm@cTfX9HQ!wG+yrfezzg6seTd+d^W8&Sf7xzAlONk1PIxsD ziw7dt)l~E2SQRLC!ZK?%I`}zcO4?84;skhkUiME9Z8Z{pkee!Dx|Z!!9v=kM8x!CD)o_cmK+%GL&za&yp`e9h1L(J--YxaJvz1f7-X z8;PWWEVXOzJJdwty=`T`b+mxFQ~13^6^Kerd(<1#ufg_DspcQ53tJHlGKG@Ip~ z(AT{O(BH~8{+Eqz5c1!@H}MwVd1LB#ypDcX$~8psdo8l|?00c$5WjPr_3^^> zq38GULIjuli0tivz-`%~ujgU2u>htsUyMRdFo4y{AWImC) zH~Xlgq>Ie~7K0J$K*=6G7^AnNXp8Y|I-sGsR_H_EhSd(Y{FROChz9Kk*vRecekDS^irun$ znq)*Oo$dk$pb^2o8d;?~-EY5$X50p1Se8e!Pc5Gm-2Trbr${yw=sUcN$5@iVB`LhQgcuuF_%%K z=FY%Ie@FWq`5eqJWe#%%sCAN}-W5a#Q&_R7@gz$SQf(A<}E5AraVpfbh_4 zOyl?>KUPEtaYDuTh};+QCcdUhF*t#I)B8khnMSx$EnR%ZBXerEECpGK$@O0`8YO<# z>{#(+w1yGa3^2)SRy^Pm&P_4YI^1czV(uu=B5E)eUuuLkGa0HI#%&wfEufStyjZfD zW7a$}R!6am&2AfpEvb0hace2d@rbdqGv}J08R2Lg39{v_33LLCvvrh7V+58pLRen4 zCZW+@w8WE#O_Uk|mKSA+t%i0rSd#F>o#J+Dw&oI(j2CI(+1B@l%_43cJh-(q9qd^z z>^!8a`TbOxa&}-4lD6i?D%mwHrxzn+5UTc#VE4;%fuXutvI_djwwVVh+3di_;eE^I zB>pf<*ivew!dUYQ=E7l{g(R9w6=C4Zs*Dcs1(yQW>v_dIF$+Wo7qT{$AUtG~%Q#71 znMswfSQZ&3)scx;R2omasNj-?m1nzP@r-G=w>TcQy9<;f>j(!PqY(*ng0u*QIT1Vj ztOsfSlrQml!8pFxnHR|1Pp0K=w8i)M%|FJ1jS3QdtBRKSJ33cvVC&s~G(LB>B3Ta7 zw~td`GU)blf1VmXe&X}kC(w5k`}doJ z>hPWS$LHgt{ExSXr{pKap6_qfugegApJ!-7LZd&wh=w7Ep7C*X4~AE?j19#5AvACI z?oaBu(jA}P-jYdPe<`!=i@F-CU_ht0iDtvw?b}xzVJ%sM&wdz=V zz6UqtR+KsrF)ns$bs|7B=HpBo^_B zr_2jJuBQ6S`nwwE1mwONk3Um9a$j-Fzs_9#sbJY*tvESgg9ggZ^p_~_sG7W09m>vw zZ|2g>qwkQbj_klVIcJ=-Hg1rO-*Wf%IO@on^kU==^RGMZsHL}I7K^<<5rT^ja9INp z(i}iCu`hbw(H(eIGerL!UMmarah2!~b@~)t+F8VNU%52Dty+sy!`6>(zR=_<<}n3E zH&04)CG(hSN6XE=HXPEHgtbW7jM|sENOb{MNhmx(e|hP2B+V`=Y_H@s>xW6W@lULE z)1k__6Vq3@XmYE$<~y7h8nagOIbEyP&t;=O)$%@{)lLf9@jI^$J{3b0 z4=)@9x!u;{Di`XV8t$Q046c4tkBO!hN<eKXC3_3E8;U;JmTagpPG z=(VyEpN_5II>q7`97LF4o%N}AJvRC|)K7BSE3Ui%Zvy^n9;5A&DL@YyY6cRIo3Z+R z+?YsIvL^tykj0f8gah{bU*rMZ&j*{x(MBBX5RZ?sE_@98))n9naYG&Q*j|h&bvs;D_~7F@BkKhXXw8!T;6C)f&8!wD0(4~P0aDBEwCcgL88Xg&teMTXQgiXjJ|d=-mfC@Q#B@pG&S8<8yU{UlmNqR=)~e33Tg_ZBv(|7NZ{8IxADIu(;v ztM%#k5Ds7~PD~a$YSiu|A*?fW%j9XucnGu&nuHgo{zHRmDi3?k%Y(h-c1JDt6}2n3 zkXvtPi~$y1ElyX6nUz9fu*N!u^LerhZtWZ*Cas|$(2N}&q3;7*YB6B1cuIMw?{^fb zv8nPYj9mVyFk?ZausbY+Dl276pKc7XI3>2(@NSJ!**L^B9(AnH4*-TRiD5G&ct793 z9yaW#rS_FGY|%Uh_e2+sA1A@1LcZBK-x~JKFTe8Y-M#=A?XssFg7bP525LW2e0RCD zvq14R`&}q7*wny#Fr_Uc4KQoMjNk-Q<_S(AiH1Heu;gSagxXG3To60u(GKBR(_7oh zaJnsuLJq?jaV|z;Abd;o*i8X8xga$DB8?B-Oj@qO08!)}=J=SUD&?evIT?3~SYg4) zDsp0#SshYEZ;~`JR1iga7bS!vkUAf#b}^CkFi1rzh$*64Dk=%Fuaq+NikZAI!_=;8 zHKY^%k-4xgXgozF1*Sc%qy}Lhm?VWW)DkioEaWJ|k~|E)l4P4YLHK%^GSL zkc}j=J_#vyaz%qG541MHN|J6;aYWt)87vD1bMZBl3so^wUT{Y8BHJ!7si}n4rQb9O z9a2|zOoj>!nq2md-X>w;Pb1Nt3{M?Z$r0hIO_cud7&#pN3VM>CDH>8CHKk;nXWJ*3 zfie~%qcf$ueX!+|n3Q~lYUS%y9=S+VM>P#BCBeb4$W;}mX)J@5CYbG0IfKai?ZGtV zzV3>g)zo<*=aJ^Nk!S-y*$5ijIAw@3u|!~!u}>r4wM~K!Z{4LHXKaSzDn6I_NW2T< zlx0@Y8!`JjL~Rl0lJ#QtQ)^n^bmXWDgRhHMpX{71=3>7DL7dtz&xxpDBIbgWdp zJ!b-nYh0j+xm}yH5!3LbHihF*WUx`Jw`SeztFH(X$MkE#3`^Zg4l`|kqbY=Qi<3YV zN{+{LIwF0etM0hiA(4}SRgP%Cd=&w_J#;EU-J>ERRC-AF*fwt%R(=Qcj~q4g&4NK_ zXN4bf``L&T!tD_a%`X74uIJBk8_%zhw83!I{_c!j~SCs&$g>-uSCGPWU;S{ zSPVa%adZegkA*2$j8}N%no-zcS%K%3Kixc;&RF$v{XGtaJS4+nSpuPZwz$0!?jyLt zx4F^VV6X|HxrIPa0O2^upF?a~PoQ@x>`PQsKT209qm8KGmj>dB-=IL@hX0~kV$EZG52>$Y{0>ynb$sx%4xm}>E>xWFv0av1E@+NE)@fM06y_ejrO&KnDj zq727E(gj59=gajaLT!CpOiX$b7c(2Lwmiy{8ET=Kgk&IeN!phVGa>u&Orx;m0%n}~ zoV3ooQm5)Iz6U43#w6+tQML7Xsep*NU{uCsN$Trr#sQ15*I8YGpY1PhL?GL@r={l2 zPVSa%c{|c_PAaroL(4q+lg0j7HJ{#>4o~evCQ*K_gcffr{xpg(qaj|(1dyn0Y#I=) zSi_M9NQX6!FQz#HG$ z1PADYY-HB=TWGS&Ic8|B;}Eyf-p`Rf2#i949k%v* z^e=s|v+|4EL}>ddYNhU{f^eBc3*voI!_h9(ko|r^ z5K2%UT!10?{R-xXKey2kHF&UI;R~o`HukX_eq7JGgb&+)LxQOYF6==@uzXF!`mfcY zGBp#HPCCG1oD21Nx@`@Msx>4-^7%5d;vCSviALP#iTl7_FabfY$kdNgaXu;%EQ{n8 ztx8fkzwV{{b)|FbllW&>$r1D0&6pFrWF$yT^Eb8Q1#vIZCT2Z7mx}HKXCDZBvDJ?- zK(Ajg;pgr4!!)%kc&K$O_-1;{f@hW_69eX7_sYzolFWx+&o!lztE1^x-df8rntemn zuv~CX-v-Js*fU?S(3K2g^LEx;gOUQXS{7Gc;Ut6$eR1@JU)Kdon=nCMT!j-(&8^Zs z(hbu0!Wlo}ukQIq#t%vpE9J8~wZfP6!aTRNlmun6_8SOU5h+B(KivQ1D%TgZxS&h`dg;4Zpz+Z=Y*u}`S$ikl7wm$trs ze45PVwawJ2Us22k?2@-4)&u`are)3E zFm@G=$nGcw*ZeHghP5fek*Kl61-?fwzK2EKXVc}_b29me4!gUAT^%ECOyRYD*aWjq z#XjXO@4t!IIJ=yMYCNx3(=q*2`SXu`4xSGJ{yY2pKf_x6|Lk)v&i_SmZRo$SR%xDJ zu%$>FtSPb0kFL-2tKy1aF?4XnSC?Zj0troH58%EawVK6KNs2_6QDVdD2f&Qk^rdMU z4%3?krzi=Q`yl6K^0mFjh+(@QZL2=0uNY`<@iLW`>~_(=akYO+mNP-B(RBorsJWvi zs|*WI$rMJfagUXP$*8ACIh%r<=VuP_(r7Wcf74M(hHJArJ7dOB@QI|RM_12z&Z(<3 z%Q1OE<1{t~>Gv|{jTa4QKZ6OA(CmsdQ`~rvt>eMxQ)jLwW!8*n=#Gu&iQ`1IS>VYJ z!H!$vK4_b=HxD)y1ztjqSuVu|#Aqn5vGClO156LR8ZFkm1245*!EBkyB5N;@iU8Uv zv0cHY&a^C%FARafw&zNwjq9J@9DCHHx!H}Tm@spqFqo(+h(XcVM~331s_PTMVy^I| zzLN3UU1OH&rVet?)V>{Ynnx>lR_xd2_6(sT4dhs{^GO*(s_4y$k}Q;O#gW;ertAwi zYvpL_M5Z=kGLN*y>TU?$64g;*J?)460^-zINZn$_064-Z)RaTPwOcv{$n^O;S{7;L z@l%y)>G2`7oXdsFBws4ZVzSB}Le0-C9Cw8(VH8ZcaLMc_z~2ikCYhmq_ZuPTRQQF-y!?Q+B|sbB2p4O^ENwR8o=j zk3mU)h6)7MyL_;!U`udwbhv~JHMf2_{k5TH=}AcEt=&ZpPA7+DO3{{_T&>J%zX?k% zbr?8mI_j9r>NQQZT1(s1=#a`mj*xFv=c>C z^^sYbx?x>v*HK|f9XS^*9;zGsEudy2;p;YMgdb}uIj-ts=$1i3O|ofR)sdo|NNb4E z9v?_H`Kh5~Wcvzi*(IBV+tv|iDA*0w2OC=ov5JOZ`l>rEjK<@eDRFQ#|Ld`JMtP!l z8Lh?{%hUl-J)0FbM27D>mq5wfF3v&0+-@%Om_KXHaTg>z?g`Zf{mDNr8W--c!PZCb z%#!N}4l)Oa>If;KhJ^{8HO*(Um$GJytVZR&NL6sQVw|xkoXcZ&zBN|@I>KGL^p{#Y zL$2&6w$DN;K>9%+KHe``CS=b}Pq$FtaG1EF0}&v@X&2n*Q27{z=AA`yJij!qg&-&d z6mg+C(ZC1|Mg>KOVL^Qc<1lrr!&MSjDS@>Ss$ume4zA19Yo2&qjm|P`_A%xp$f9NA zrT}~PUW|NlvD??5pzXKa#1@8aqPO#7hz`As=#P`*U;`JtSQ+ANU(cuG!5IU>9e#el z=a=LKzOSR7iI(5Y%=bbNiaCWGSOwZcX0nR3m6#w~0!LV90SI&*xcHXD5T#a1ObiWy z`=~T4zW(M`ry4g$;D7S@zrQ>qOBYH{G^lo{u2yyqNI!t*1QU^7pt5g0wJ2Nbn%t%@ zs7JIhi+&=}82&hCN-%tW-T~w(CbkxFN6G8|Sk0y_b;Oa0#6K)n&eK|Bh9RK=_oF&O z0%4D$e>U{5cHF5av@wU;woEWI3Q|ssikQ%wB(%Ja&IHQ}lKV+bPKmtIqcy80PDfC; z+qvdybPe;zr7~Y8Dsnf2Pimo+yNwk=}!F`Fx#zUphmH(3jkaIv0DBh7iM&xzTx4 z*{c1$c^~yaK_(FpXunsjKRKOKfthYV|MS50w5=@cR$MUnBrf-RC z`hI%^`nV7O{{H;jUC;h4?@j9iDAH)gGK55y`4*Fcq6^Pv8*f{_RHM!Xy!cz5-@_~5 z)|MyW=k<2J#5di0+ou=kf|8$4oZB93^88p_oV+snLiF*Z^>@~#Z33))*xN}WDvRuq zLB`3GCe6&CH{6V*eMX7FrXLFM7!kW#xgA{g1DiOES5ce0F2l%FSB|OW1@k~D8FiAq z!q$u6K+6K%3STX4EY_*!Ox_<`ZF|}>-J0;i2SYA6Xp&KKUaLBD{uz}7H;VNESMl43 zYW!^vZC_Uw1nY2vr2(@QcI;D&+y&IU)?zIeI}U~Za^Ojtt`);!W4?rKx-EWm+e4Tc zDw-bk*H_Q_dd|RPA`3P*;^@AIbu+oxdAZ!tb1kNoIi*zd#~ewA(oN=*P1Vxh)Aheg z&TJ4F-c`;JkQlx_Onkb+Jv~o$Z-ZZ9{J`n#z$e=6!0FtINtNXx3wP=ge+kji+olYc zsqp;JE^mVd#1K$bJ+as=Pj(voB7m|gGt5jZ%2cT{BOP4!Nil-@QBL*PJY<76_QOm9 zk6>&}@kdJ_q7}@kK7_Ub8`W*rBNsezQHWqdbWv!N1)bWaNN}n} zpf~wBS$IUR#>lV6aW9|cI((U)x69I?m41B%p-KF}k8z=Hq9GKo7RUT^x*l3F;uwF8 z4Kf&iM~fWcRBPTIjTM2i+Wm;oKmH?P*m$Gm?(yo`!$ypX#l=jHxuzXru*kFrU;XgP9WYhym z@MMv@NkmY?{)zq4U2<9^gsWL#LGjx*#FbH|B_)8RC=JCt!jSUR490uy zY=bt)|6#N?k57=L)k7clt}MpRp;2yf&A|}Sj3Oo!Zdz)Or4X-G@^MBr3*|t9M4y|b ztQ&e{HcA4Kpa#ZYA}X_Rrx`9BMgqvZLi72J#JP|7XOZbx3PvhaZbNO;eydb5n=p0!}&kKLj50?g4x+Q z{^zh|mv+BBp*U*lA1M2r7fXff>+|!vs3KSjh9L5!F;28G;W_GU)Do)5q?Qz^2sU&W zfsmbDLGD{DDYzx|jj5>BIG>T-;P6D;*rpcXCXC*MEkRqB6B`LH{ zSZQVVL}g{C0CQm`sMi>xFkLk7aPjU%jsi>?%o=RiI?9Le@kC7>G06(s3?di}HNxat z3LM|YP=*9IvqyA#x>!gOV|HAHQ^tJ(o7mZNFxcws^d_i$RN(Po_vy2_J9`eAMnqkliNw8tG8V@9b0)j?JSK!8yER0MlY%fD&@i3v&yTS(1 zrQv~YkEARo~xf0O-;@<)u+|xq{d+QW7EM{c}K|1`%aN3GYD` zSkX)9OQ2qWnxGP1!zF5mn41PyBzcEkZ;#K#Dkl;Mxo4|er@p>D{kuEJUo%<5v)#wl z<>~a{{^)w|W%#W4;ji`cU@U<(!`Vm|>muW+L72x(LzA5qUFB~=4i#LAsbp#K$DYJ} zTw1&2GBzneKli&AaG$yh&TL1~Su}UGR!}!zhcTjxR5L-%drs>$VHSTEhnpP_*vR=8VP2qP0QB$SlNyp zac8O_f4@qbFmYijA1`qhu>Ce*Qp|MXK_%cku~+A0k6*8d^{H&;7#;2;ch$wnPt5ai z#0htkaDL8~^u&_K6@0R+`^zN8iOytg)0oSxm)|7o7j8}rZK;5yD-;1=OvB0eWe4j% zE`{DOrn-y?b1+x&3ytjpQlW=b1kr;&TqVUNjlmJ^S4-+mz@Aq*;T;=Miz;&HGg_|K zL?QP=1NNr|g(s()O4gZFsucHdH0`YnFc3%)wxW$PI5*Wj>HSI3K#bzQ2Z z_pQ}YoI^D!F;kQc4h`AA;QKBkkiJX|LHF-V1&ss* zQmYSxHy=A-j6;F2Y9VpPs`;oyOk0$a5c(g10I>~Q;TvOs$#CdlaTGXfHqebMyBF4Z zOneE_k`PNiAPhqV&5~-PO(?lW0CtwHlGQNmSRcblLm&$uc`}>Y-=~r|5YcO4ET%gXNKK9mLm`D>mnCb|I{xOesjy&QIWMUEOv7v{~ z(^1fM0ZE?_K28ttSs4}tA$svZh}kr$pw13&z3Aqt*mZd^*eoCUA!I-0<_I&>YzGA> z1Opd3HMX!`@o0yTMrU+#e~aaU^TO;bbN{&;4v}u z$LLe0_KzmJ4rvmGgYsz4FoB1X><qL~qY_ljIf<3CoJwMz(R$s#C&GYf?mt4dYMcAxU3&sl{ zXlflpTmvj0X{|s2y6m-Zx zS{l)1kWKk0#EAV*pV83?{k3vT2B(H?IdzfEoAw${^;HHLfn+osy8Y7Kuh+wpGq(D- z*Uorar0+-jaL(v(kk9+)`)3dL>0CI92H#y=oZMcos%IQXdb*xZd_YK7vu>Vvfof-S zQxDPaGB>7@XX6ISD=sS^yB9e1D5v+1+MOx?0!G1)x<9eyOhS;F)#iYd{hKB6c;=Qo zHLu3MjCmv84R$ANE}6mu7Tm`gE6fC8@Y+OMMdr~vs2pWK@gcA-OovlUN|y;%$c>kj z=~Z{aOHYEmes1q~XH!pYpmu})1ki4m&E9$TMLqKFN*)$JAXM`Fehe>8R7P~d;^psX zb$EKdp1@nKgAc9+HHMEC-s^3-Ait&iex`et>XZWSPQF3U%RS%B-}_6&{I^=XUlyN% z``b1BX9IS=BRM`9zBOYpt5LHAscFi&1LmGT*T>7gGxNlZv*fEvv7iaYX_O(w@q0e9^& zJ=zjGpHy)Dx9e%-hp|ScqvPY5l&8lr&M?+yTb_Zy?C$>)GEC|MIVb=BsQzm{G zAXl(4-KDgSDZH8`o26UfNyHzX*>>4mE@2eK5CAt*@Bx5ZU-D(?p`Fes?y8YGZzysM z^8Ayrmh6n^w3CDG?L1C+RAMi2`L1>RN5hKE*ts2lP#m|eTg1XAmqI@_d(KC-(&ec7 zxQ!KdB+rs#inEv(=-fS-V8*+c9j#YH7D_hU#txTcUzFT@msxDczo3*4Wx~7j=}GR- zm}$05+;4hsbYe+kL&AGCjmG++2omvNy8SRAmHUbmGMA(Yig!Q}z0;}D!Yv6W`?D6Q z9+4KLz~M)xEYwaT$tk z#_Q%v<<{&m_9eg|dlHK_s>7S}Ka|`HSfR)?#+#R_W=~?uDLZEOw!v3*!N;PhogDIGA^HBiBzPU__4Wq38V=0O zsR-EYpV=kudjT-djwEBRlxs0N-{hxR?joYD-Hc^CH-5ODtLLcRzWZ+ShLPQeJf) zm(?ix5J$eVj(jU*F1rzVg~sGOG@j|bJM+zbu^iWdWBzcyb8kFxdEQ{FP2vKsk%gfJ zQ5|B;BVpywibMRKQrt^^jvu3QeLVAIY<%x?2!)Ft_YzJl$3It+Pv-E_HoIqB+Akfa zE3^FR+K0no7sR7}C1OIl3yNM);Z$PlPapc*sn(x0MT6A>&K%54DVa=rbfBjaI!|JNo4qRv!{$|rli32&feZ) zvU2!&J7on$2}f?CcjL4UEgQcN^Oj-nUS>lkQfum6&Q zM6%*8;re)y4WHy${hSE{G+xiEq?vv0d-#ld__u9QM03(5p^>Puo2B~WZhooUn z*ieEcX!DK|pyCILh$FiD!^`A4&ZSq&cd&i`vG>X!y5_1kE(uO-rn8!pxjh3tU6FIa z-+6tv;T=E&%rM>lMItUJ1T-R0WtS3kiVWhYa` zEPn^3kJMcz$49M$Q@w#lL6~04~7)A{#TLv+)lU8|sD1+csZ<+|2|P(h(KM3d0ooz)Go)CMNRRncX?$Ev{7F zdhc2MZ`r8763I-7I$1=oo6R$#?~Zc$P2=Lq(J8GoC+OrnAi!U99A7osPEzU8LmIQx zMiXW_tkGfis^}rQ$Y^!9WDnYN588IyNA$e~N_Q%()FS$@#H4Cl{Iw;ZI-LSGJ(hk0 zErQs>_;x7t&d@G+rbQ;Hxe8ja(LJLHyYAJ-Aq)2_C!eRKaUc!v1Y)zTC7xwR1-=9U zeB}m|<#5bin^H8e&jMAIp3!|NPyD8fN4v3jH#iEah)27Mg8Ws3G;8ae$O*v89aTdy z;(&=%3!tW|z&DP2R$if>ZN#e^@kG_=0Asy)*{Fc=8FLj^d4+6=o7TGmvL>=o8 zS8WxjvBFCi5R4MW!gjP|S=^tj`8KpR-u-AG7`0YCY6fAcJ4Q6y6RAdcgyksytrWhs`l=%AquJG-wk20gyDw0zNDatrIYDCnN${UvZM z-DooeYw21Eo)ECmzC5Tb+-hZ6R982cWQuLe_#m==@X+VodqQ=> za1V^VVea6F3qztQz_9^7n`qbgoqa1TyQPPfLsus!6W_ii!*Ou9t9sK>d?BoZvDHz{ z%)aqC>c}tIpMZwx+plqoT)NVqvhT)wd%n7y`kM`-|RdcCY6p zgLU`w?&oC-X2HK#4=ag2SM>YN20*(nk zch2Ur46I<)1*y(u!VYKdu=aS}L!4Uv(b8YpXt&^jIN^Ccna7R`8oECH=b>JD)c3km z6UAL8lE}5?{N>N=6JJY}dD0{>ad7U`@Rip=&wK22pZjtJ?Gfv*hZuG`o2XQlM2STk z*Gvjc=~2}Ghp~4Ik|b)kMti1h+qR8q+qP}nHmYsgwx*|T+qS2>r+w@FBJR2O&pF?T z$jI1LKXz7S?8sdES?gKrC8^7`mYX592^+b7#xv^rT<1i6fCTvVXDhh1UNLK$TCREP z;KaeJ63BMWR4DdV#u;y9J1}HW6-X7Aeg7qpBkoori_b15o)I=9S=?2oDTit`)GNNq z?X1TApP!D`y@HocW-Bg>;P7K>QR75iXur0@-F5lYLyy9&&V2kZW_S-!Q?BdD6BjH% z9w*F|B|dp0d!UOm?mvrIro=nhjMVbj%>cAFzP4JLfzV)1jbe+IiPP`lbu-`88bKcN zJBltOUBENmh?PXRWn*^V;)>8|JJ{g9Wa&3jqZmKs#x&K$#)C1ktDh=I&P@^brHeDx z)~!&nLVE;Wpg zHjG=^>(wFfv^ThHz-?q%;=9_boi<^!bpj#y>53BpxBz_Hi4st`1*YaDfKDO5uk+&6 zh$g`ho9u-{`G}^W^G*+c7>n`gs2*LBSVz2V|tw=YN?D~t7^U?pkNoHB?FCwEEzQs+LTAD-4%yyoT_ zV5xbJb+9A&%#-Gc!0aG?wHcOjf;5_xEzUjZ-;BAQ>JDCTnYQR>W#@Biy;iV+^LAyu zRbZ`w&k^7DoN>ynf2`Caksdhm%AcxqBg03kx3V2$rp3doXKjFZnuVS+$vo5>bR{F1 zSM7SKK1OC-ZV4O}Ps$hL3SFKIlwclglqSx+vNQ&^*^pn6*(=#$%IBoOSGl8G99ou+ z`qnuKnbi=QrBpZ-DY(^ewdN!;Ts|XTUpQXLVV?VhuxNNx350jNxCh=cf_2M(BML3J zkI66aXk1=YxE*T4Eca~3xlcATDKhRoeQ%;~a*u1o{A0q-K~oFOjLh)FH@P04B} zF!`~6+HW?dg4-t@t`~Gpdt_@Gh3XGmZLIu5+P0OqF1XxgVy1-L%O2yKk4;Y1du~D- z*p1`!bnegI8)ikS2H^$Bv~dHDcAGBwGR%8!GU)94ihCHRdtmkG`|91PQp{+{xNoez z5R}`5#nZdAbAxqX^iPQH+nOtCH!>)N9@NJ!N<f$N+wR_E_OPArR z@~-h2N{1kZaI$%_&b+?fGx--6*9y72z5X4p4|sf?UbK1YO8*g!s(*Wy{B+r#4L`sM zxx1v!y;-^X-TD2}-P@!%%VzUPr&Dvr=MsQuQpRfGtWi&wvqF2>jcOhsj`bF9G7}wU zWD8=Px9d`)LowyMkryJNe?L|>PrU~`uvSM7xAIK3HMF+)+(7R&8M;NbtMc`;)? zT9*?pyinm_^4Z!>tL+HsC-wHi+yY%TFl(f^ z1?%$>$?GBZd9s`7xJ8pF#i`y%|NOCGupX2#O(&5x4R5rqw63h19DccRRfp&anO8bl zR&c#_;+PqG05y+Mv)t7ZE4w6DQ}%?|gqLpI)SdW8holp6L>G*9+65+CCEE`<8acs5Y1BFCZ8#3u9i1K~ z3WIh~B=9N%KrfLvs*`A=x8j(w)u6eR6GG(MP^FC+%co(zNS^p%*mL zA+)trRV8Wi)CdN82WE)c45lb-QuAb%7tK<0Y%x-E(dg);R9tWr&4ZL~YIu+a8cI>b zjpGLy3n+~Iu6QA@@IP2|;DYd0Kb#{0*34ky^vzy^)CD#45Lhm4#uj)`X^I*`sFl?P zRxMaaK=7qXF(=L3Pt|j@ZY)S$vNsL7kSg4UMYVsX_yi!Xeajds#j?XJ0hHDqWH@c( zasZN+dD@_~Tp)ZW8YepNL_rVHC|Xf}J7%^lsm(>JS~T1}vw2Yi3`f(_CBz5R(?dt! z=&%YIUj6^wUAd0` z^}9VE|FGRD)ni&~IhNPYEWe$&0)ky$vB&HIZtbJysadHArEFm$Lk`c#ht{qBPnO0x z6waja%huA1qAk5!1tzUorZ_Zl8KaS<%Z4`=B%^i88pok9)BdAe=aOO8%`_sL6RwdR zoQbvV%f5IDM_MHB;;|+}TZHlsPFm%~zwZVk?M_+C4^8&XpiB;CGK~35=+dDVy$7?m z>@K(ot7*@tb-W+bzVJ%geM(W|W3D)Op+QHiYk^;&rJd?} zw(xJ1$^!JLmF~&51yr4=3(a!c-o;dZd@4SCaDBDA z=mqOOxG8luucfNF*zmy+6Ivqurw?> zhdB@CdUXAlbtVDc-z7T&)E=djXw=t#Tc65{NMl-RUjDMr9JZq)BEL{HJz?Tp+N6|4 z)%MS6N|0t!G!6cyzjmC{G$>}7P8G+?j%i#?NW$|=BJA%72yp3M_wV>#@N1phjE&8& zD7A2K&<~&p+-Wlrz-{EbTT_rqK?U{mZS3R^=<|B``?g6bU^~N@-Vx$p!Mh;1$E*MS zbvg>Utim;qdfsbB#(&4(-N`A* z-wKo8=k3ycp4=iA=f?X&j*`IKQdW4E)lyVW&${a_W>BR5gu0`2MV^6uY_#P_Ak z7@*ewD%x-3$#QjK0JLv<=J8+r@1EuV8=H3^iO2T;KFe7+SpF|k=$ijuO(Rd7b0?T6 zFs4ItKHCT}_NTa^?6uT8lU%ST9GSrq;dwgRXM7o2C%MC*%ZcrI3nGJ)_)!s+vyzT7 zz8~g2^fXY7_{6UK$Pr(V)VC~F!DR?kYZt0%FhmlBM?>Dg@BlEwQux6 z5Gb%O4Y-^nDYOi|^pFOfG=MR?VeEx^OJatqtHsl93($C1%mc*@ru3ht;=B;Dh;<)F zqVUfMF?D2kOmz79*u)|w4wDkgA&xY(xN7XhPV(pTRsKi6&#i%V<=XEsZ%MbvM}Q0AgGm4fJ*M!ubhJJ-PY0>!u>)f0|;4M<(cT z<0H{UQf-YzmO2&e;^gYMwB#wO(~y;gM;9hSVvSZ8Ju*(KPZ7#~TB0h&Z%vUW;gmmz zDvE>x5f&?7>!ZaRvnnj{J~hNl{x(KaNXe?QHDZgDD4I}HG({g^kS&>N{p4BCV$IG_ zHT`CfsH)4<6t0a=tBQ^|1+0VR9MSLCPu3BheLLChVG0>4^dL zR17r+^a#bZ>cpXrCJ7Ow76sN#M}_?iluGa!`W&nvP((5i2fj!YeV)$JUS!a!2m_}< zYwkA)MmC@e#xkZfyai<-K#fiQtGb9e6H#n_NEtL*J7M^W%52TN@H*8Jn=a z>6|B7w3vj2B(z?MU?*0nGBo<%MwAL1>cFfPItOEzo62Zzq%MmIa!~@eS}_vZu@RIZ zb*=&{k*mr=U18%A5EzAnn=>9OWt{@HiK|!`9J9FoLTYx$XGPj{$9uQMF(e3R-a|$a}gyYLz zX>@$uc1ZY%r#a%R9x>6W#3-p%S?1jhr$QzuXtZD#{;F~7bSS-wn#sT{Whu-{RUhZH zrJnVxB+p;lFh|V|F9plLw)iTGrw(*@$J+|AhE;io7rxmIB%1_)h-4(Vif$Q3woeV7$RY|q z@ac4i%$&OM{C)dPsW55bwD$dMx{W!*3te_}Cl*%M960DL&vklhD+HUgr~KwrIli8#LXY8;+?oe=rSnKfh8P)Qvs+t_fA&PA)Rl zQP=A=80+dBzPvqr+&&)>+cg+(0(`$uzRtI=1^PamEm!M8Horzw`ucjk-Xl?5CCwTT z2qID<{w6xToUQNv{I?eV_<@YHMY{@_($8O*L+4Ri{inQYmLMqAY)u`9+D$DlSWR3f z+zwrlW7+P*Xsrps27JZn5s$8BuapSOuU&=qBOHHJl-SSH{u!*4w@N!cZN^E zijj{W>5P!{tf;gI4txki0;(RM9L-~5jMXd4MkBe>ONk%Sizg+wnU7?Y_>zareT)S% z>JnfVGv9{MOJh|BkHRRDuAeHZ0^rL~efSU$f0+_SYPm|uPu5V03yq+-4nPT(rA@vmq3bA0`;5no#5UpF z_bFiMp0#^>$UH^Gg0C>M)b2FM&uWpyeG?Gc_>IYZBeXeiiAlpy@up?w;cseELOedU z+?2)W55tqv{vnXT^@(fr`1r5o4)0(*b*~QGC9)@$O3#Mjc44eLB|Jr=cZ~V0uEQa^ zJyqaDhJm=9^#gs`9Uhg1vEt3^<-*oyYEf6eRA?y*(ksDjEM&u_w?KEH4$@Zcz_9bL z+~&#Yz12APkV+6;rHx$co_lvg^qLCWDEClPtfp`!KHF^29~Mi-a@|uTNUu|&9kV+T zY*&N5V7O_Yrb({k!nM|uvAQ9bNJ`Lk9mzb>^rUoT-rQ8S2+ee4@+By-6H+z5rxOSvJpA4lKkElAtf9PR>JX0>VhHW~ zc&|a=HVD$0K|+2Tsg6gu{1cPN=j-**daxcc zxE|x-KTJ19fhP)xMgg}!9IyT&jf5e_!V>;&oF1L8d_Fx4bSaN$=qFg;;#-T^h>4LW z=8{-`hfU(1bGO>LBs}%>4*10at^M=)VuZU&Tni#Bu-DqDZc{}YqBO8q+_G*z!G;ja zVw*|+$q^5FPr`tg$uAy?t!A+T9H*5D;Wg-`+caydaGqbt>O>IPN1?p)YHJtpE7sE* zQ>Yipih*4!4f)+Y@8rQbAc7?-1N6y$+QqB0pCA+Lnq9zy_b1;Bt=C_9g8UwqXZfF) zrc}2AaRgm5+?j<-9%y_oRztoB_ohU=3HMv&PhZ-$D2)!7o;Qoy;*+0_^dxTUG0)=6 zj`a$e|IX}hpb@inv9q?Yzx$26TR*3JxkDL0{erCQN zo$Mf*MPE4v96vA}j0@V+o5qYf4K+nmHIklii(p$Tg zohzQysh*c$5B^;#u@tj?g?;CzRY9_M0DRk}~{&>-#-8`L{-;ippo}O1Ma{-i#KoGegY{c@XI|Ep(uuril;|kqN8sgr?T5bJMWNo*%g^09%;a$yVNVys zIad{L$9|)LyhvPk^c#&sP88qiV-qU!zw5)lj9$I^QrYN+;oUB`MdC$FRRa!tH!$9s z0snDLTJGpL{O`c(|1P(I<^S^<{l6;ChII7e^(2rnYD&C9%Fn;6fSwxRp?UGS zbfyqKvIKBZS58M)LFf%X+<(JpV&1tepU*(&@xHk4N*)nc>bgB?=sl^q<=5p&vs0ex z4F@z=3xypBQ_-klR#b^HP~eU*yw)UjT)FAqGicyz1k(zsM%Oi1ryN;J(+DZ3wxda8 zG)pZvTBMFSweGG-wd@W-SF0^|?{QaQ85*u&+k{fV=q1B8R`^ddloaft$4Hs78nScK z@EHo5xAr!{l5f@@2)Cjm&t+lDf#HDXrU#1KlFVhGX9QBHO&1;%&BDO-4(m6- z1%s1VnGSWMCCO9#DC$%wl4-2SB1>ly9)@eo(srW8g)B&HqSqfQrJwoPVm*LTpk$wn zd?iCBCRX57N%K>#2Pm2%t~Z7#HdbyFJgPBv<2J<=WRTFK2x8^Nzy%>GD?)s`yC4ty5S zC71*N!iMzZ6k#Cu(yBL#balT2Xw)^D=&4YKtXUgq#Yh#Dh^#}QV5!tPMW8KBWQmGs+JR%Z+iXF zmu~A7bSK^Dr6g10jUS^;QoF^0Y-wsFM33CmF`)Nn1ab)!d0PyM44s+-Lv7vRV+bV# zF->QTcPvY(b_?8rdYA~!G&je{`%Vfw6iaAkXXKPZ12>`fce>#rF!gkVQ+KmyLmjOr z)d#G@j+=x3?77(Vc+OF*c&Knc8X^lh5G15(qI3MhyaCjC?3ve5Wa>Ys2Mz&FEl$Ic zD(0;diKw8O575?)ks7e0H4c6mws`pVEW5`2wyOD~aGROaHOF;FlR@;sxEkDw17TXx zdh$pmTVXhDW2|L}CIT=lBSdBzOrZ;km;(|LtlHPn3NFo}@N^?Pow^M~`l~q%UNrnM zV;7FCDm=?$4$%de!Os1pw7ZdPq|Grz{*HgwD!g@`9!Cilc#| z3jSWthiy(yOpW&XU4EcadU@J_|6?u%-_F|m?<-;JXhh3jt`?}Mt#g1GLegf&HCYSj ztViJY!zJeKHfwTh<{x0{*95>aBKaI4XL68;>X6qg?@sYfPo@md)Z|9w;|$4ot!0X^ zob<$OXbt()Q{#e#gas{1i{}RK6^8L}C0GnOKYc$1;P-xgn4Yfn`FAjUna$}yP|@f|O2%(7em|x4!Hd__>vA)`+P+%9 zbu8EX_;{(|;6T9jJ#(0EacvNt>W>!lI6;R)M&L#H)EiiEr2BooJpF6q{a{Mud@=hH z^Mxv|<;001WdI3#v-B!~GUv2Sd9 zoYKk6k0f=Wd+HRQ;PEXb!3h>i=g!l}sa%Lq4*oWuF1hI5Xr+l;%HLD%v9a8}gvxlz z1Pfn#bZ!iorV28J*!@qBZL&^HdH{SOKG&3SoeR4!E_`NsQe}x)mq;`0M7=bGtW!ZN z^p=0|nx{zb3_Ep&KoG1NPId`r*G?wlHQ9`ctu4Ho^|oOTj0;9Wmrd;td94@ z8~=tcL3L2^k2)`r*-7KJ?elC&W^kePR&F6D-xhIHhQGf7*nEA#)Mbi zXdTA=U)iVzb6@lQt7z_klQHYC2QzIbM*8%x@kP9Wg*BN4Dh(?z zvV`qZ$d}`0uVi;f>aNF!*S%?vU8@D%AJV>X_XVWy^2ud41UiE*=#46D)2Tgt()#j~ zYwJ!nXgoLL*_0fbzHE(jXIjM`^QPyrvo2xuiwRD*6uE#-dH<(H%R)tLH+wdfidf4u z*Rnzl1AU-&@@joFJ>A-=T;t>^n=_XxpF45AR3)|9?(HFYbl3l>x&Qn6N#Ofm@+W-G z5^H%I(;{%CoXo=(D+g?Ca-8lu@!ZGDw8g;Fyy9_=P0*c$I~|b-_>GFayOZ1L6_|MF zvTX?b*U{qeZR?)bmwvq|z_$7|KMIs5O+5u#?t*58Ew{ttyWe;=IDk$6X)8zlHGA46 z)N%^}{E&|Q%jYypNYxC#?bpZII?F0D2~IZ1=!=zrQ?nSGr+_vu8xD^sDY;jGW@mMX zs{zDZUNqYyI+}NOo@IQvYP=AE{o+e#F*giKt;jPe+4OvZDNvQQfBw!291il>&N}2( zoAcc?d0wUQ^$B?5rI6(fsO;>1I_4Z$35ecp9V4!q03!6(Z7^p2&Y9{(o>_m+`d!5K zAzyD2HSfJ?*Yv_&UZ5HX6!sd}+^%@z`bux^px5CL@SdLHP?P1JUs-(#lKGh1ZKo7N z7Ts=Ak%02SQNvpq=$no9y9#HG=LNoJ2f5NsBYoD1-&W(hll%0;VCxA$MNJ8fsEu85 z{IRVQzz4R~#ZyM>#41G80AXF!fq2;>F)-s%LMMc@U*VZB%juRmQsO-{gm7WcFH&Sf zEr_00;mB`w9~yJJ{BizUYcvnsv>Nu^I6YpS6NPIEu1wTfLb|XKg)1PYJuly*3 z-m#4zR9A6Wldd?Qv`qDy{^P*<@a`3_Uc5bYvBJ`7$Vm6}@e9J2M{mJC%VQ&T}r&uU^Jw^YROQ{692nR<)~@YM1Eb+BM?6Zh*_Em2q=ej1f~>?nH3g zXW?+s@~7SE$V4*oV^DjO)x`|ITlf+0#Aa`MMvjE}vC{s-SR)@0GITm76n>){f+X3X z1>^xF5%7)?fLFzO_C&nrnb%q;&u_Frs zhg@{&`SIG!(+!@H_=sFIH)F~fEH#BOaDv}0)&QQHA54!EPaI5t0&fJGMb|7w89S9J zY98kri>uP9DlXWoYIq>|$8yk(1e*2Xry$N@#?Mq%^%HRMJz^C=SSDvE3s!wb@b43s zMkw0>Ch#D7Mezc%loZt@LsHB&)j!gy`PLcC0_=Zi5ORN8u{-cX58-5DdS=WwViR>U z+oP>WjZ+MrX*!gYH0a-JgSP?J(bj(2L=dUrc4mReZAz}g+om|}|5)qc`2E+*E_A|8 zUxo>^etE8sqX#3^J&RUU^8`*Kxdj=au+b{aC8@mi0M5NkwEX|rdVOhN`PUg%~tQS0Lx ze)Uh8ol|=2Z=EH$%9x%;?{TH9Vz$H(}qNoxKBhRJ%-weFRo2bxTY1<1Cy>zyaX+{VnQ=X?cq z;r&J{ZN9B6`~7mQj*W(ce*g49`g&6GX74^kM7K^i;&Z#Wf;-`^LZp0K$)W1Z?FZLC z`M%X}zi&L}uZ!ybh=9Bt3(HovzkBtgKAo-x{(h&^JF_+~H`g^c`M5h{kE7@0*d2>G zR?1-dcD2F}tx`P($`3Y(1b7GuLlZkY&HMZNV#N8Qu2`tXkK^;tlD2S*4!8CR@e$`9 zC;@E?20gb6SN@e(uNWyg;hGCb$ErAQz0=pZ^Epz7Rz;A0RPvnRn?4r2VLXAt_`Cz^ z)$uh<>wEqqHbyQc2vJ$CW!N*EGmaynPGK2V>I<%QblbSL zoC|ZZ(IUEDtB|{KDOplZdvw20j42m14U$UAhyAm@CX#zGT>w=ZCTc!4)(Nf1Qu24A z>vAtn%E8>vVlHUW8l0bEFAO6#7ToC^G226!BCIA}9;5aXF+j;8G|B`om%9orkgbR2YC zv5F+;Z$Sw~Qft^SqTLD{CD2&m2lRzHfMb{{EtwW^uk;&5iz_1beX>1)Sy$u`A|TaD zaFSC!E==9J=G$qMQC>?TOg&d2^&FxWB8OoegIlevyN$WD%2=aLyHJ}Anm%PM#*!u5{@S8s}o%Lc6l|esuPwIJOQob4;|(nP{aME%}J3 zQ?Y%DxAs~&^=Tf_qMp4~HP49Ka>w&>*4aNNNQR30gJRwilf2p1?{&&u)AW|5N>d7( zU1$JgljI?m3%}nX@&slM!kfzZWkR5DfiM~rvE?END0aaY6<;?s8cJGIXpZa7!K1-j2s_hZlb* z>$0s^Um`3eg4$aF|A}Ua`8)z;h<47g(}HP_x@JS<)yOZDUwtj%OqS5?^Bn8?^Y5ST zzgGZ4u|&e*VwH~4vmV-ixw_CarV=S?Gz^MLQF?~zm7Q3{lIz`TNzzBk>ZIHqvL(u{ zofYC3gKFfOwPi|pl*40JRh)4b)~y!PtyLYvybn^-Xu&%AN_&(_N~I|H;L6$LLZ=wFQC%mB z!OnqUKc{K9nM7H?h#rb4-RF0tVyl4r^*?AWv2k=Au_Va0A2>gCC^#b8uOY(jF!&vzR8&nIqsN=T=>8OD zYP;h#!>6*5o%hi;?up zY_&*(@HaWVc{8lCypWhJC=wc$?$0E3cDiaib})t?v{i_b+v@Zlic$r{s6i{X-2>zW zPv$FvlNDmg1Cvzbjg&2jo#LqjQ)4?N&VXm4bx7>3*lFU_6yodeKxI`B|C zV$Nnn-6k@mVA4yeR6%9{Z8e==J(&+fM~#()kfYY2oRFhU(`m3yYHMhy;p$2le#Evd zN44wpv^;9&GNC9gmb4yNTaYb(pnaglbFu5z(Y2pdXJrLqBw0g9uZrl(TOn0P*mT*R zGh24>q};ATaQ84Dw0$!d*+6O^J&R*8)6HqV!RJ>izGjb4V=gh#=lO-Uw0t}(W1YVK z_SV<&_4e|#g20wuZ%@F>{^t8`Z}0m%rUBgbmfM6ogmNk4t^F=vp(+m-~hnS zT<5Q^_pQd&d)VXoGxTNR75SJ^fr`|X+I9Fr@&1jCO4AM2oYEEey9E<##UY^00XO@Rxy<^_vo z{p}x>$SWTNXRHNFbUv(}G+34tt8(29+3<%lGk*dDb-w?@QZ>^Nj3Pg>7+*$OAta7+ zz+W6BEU|O6AzW0N#9R^;@^ExB)C<-aHaBjv38N`Ds>y%>D$mvw=WiI9SFB;FtRau`2bi-Vv0(Z8D$3Zy0u5~*Sj=L zjq+el>Sm?Yj2+RSR?CjDU^BjwG`q~LFQ3QarTHdOYnNH%W|>**J&2uHWfq(Hr*(2O zypklh$}X`0o!Ia-d>aw9H5N(Np%$bLxlGSHrQF=bR}uZY2jAB3f`B_*k{dv=C>3xo zTzM6DOU032D)4#dRX&wKm0u)aDymV9xSR(?K2Kxn=%hjlY#r4gW@d67V}i`oAa+_g z2lk960SBUIz?z`*oTn$*umE^~HNom+q`g&35L45yA>vYegyksPTOK}`4*4{aAs#QbSVCO?nWT$IV`w`)iVem&>Z(Cx z?eq*2&al0~T@*>$X&AISSXbAJ4&RAk6y+CJ0-mDZ^Yv%MW;>^cz|Qx?r}muBtW?6$ z<|Lv0_kAd6NcLjIB3lwkT#2M_Vex8xUclqS$@;VghnJqrF zI(#pEqc8^F`(;+(`{1cxKj8Di;Va#mMb}dKg<}|VTNMPS5y4{+7d1-gpj^Ta1tln%Vyg72fg8k%t5W$?=RIW-7C9Ve=gC5OC z^ZRf3ef-UT$?4I1$ochoswCs3sz?9~LSyKB|K0!Y)kAvnNz6W)>Eh&6sUn_NJT^61 zuw1JD)fbRD7j!Q> z;E2EiGMqsLz~%sL@hyXpCq4dnoiryO`W3zi&4BpIg1`1UUe9Ao5Eku9xONR5xM~Xv zVewzjZ`IqXzk4fex@~Fp91Ds6mAW4cBYfVf{yrB@?rP7`s9D>IC)oaHkq?u#1%;mp z)6ssA#t02sui41t`bJrFUK#k2=WuO&b)_nJ7#-^ita+j!S_N!b+Eu;G-8|QJdo{eA z`T1z%6q#>qpUVbcJo#(Hx)hjUtM+|wp+DkT>OrK|lei97-pC)N3ypFTdTZlDUi&H> zhFIeeq9|J4)VmoU~!_NxsNW?DkrS|yk2~0q%Bx?c@!dF8Uz4=F_HU!aO?vGIqLD zl6Xvc+b5k#G<-NEQix!2ZRJjrGQw{{)yd*rjpHT8@eod#2*&+Soku&L=>ETfz+C^k zzyP-Y3JhRnVPgHiKwzC|2R#jB2V`MYQ_vU~x5Z}CDAm`z%tx)NDl5o zxh)CQtd7J(O;Jg38dx=JVxc*BSWUI_aDg9P!ZlU)iJDE9MYdh!<}*{hhqxafS3dS+ zU5*s(tdH5O2B#)DfEt%F=Af^?6ddj>oZkGkTpvNRVid{`wRb7q-Ntf9O~NrHgTmpxPaa8T6AzYHbeA-! z?PGGUiKOq0ojGDk!P0bI$qe$_+ln5fqzqsPlE_ZRwuiIt2GR3Rz>8$qh+2`V<_<+W zGFBWmFcNP})RMV5T-I{D(c>J{)UZX?l6zc(ZHLt;UzU1?@kBTwl2n_P9H9 z62C?`TPcCr9?ht?OPa zsZ`0J^mF&VHqtf;3L8_Q!)d76`V-Rm|La*D#Suxf?s$Bl1kq_%}+gP zmz+3C&Kg@90^A;2F*X{-qbScre*c~;;mGuQAH8c)53%Qi&1r8d~ z{u2df(37&h8SEdVsHq3`OgMT_Hz85+;>aTo;U)GaiDw?SIJ^#zpT~ywgTiGeR5%qj zM`&DhOYF`VFG{Ope+iS9kh9B<3)0p!?GFK+*V2M6=iO9$OWd}HU`fjHXJmX!n7D*T zyzC*Gblb)k)}Y!`V$^{&(fj_{+yoraxQJg2f;odhwuh z{-rr5JgeUehylg=`;@w|J&Q%O9n8>rj>-Q<(YIFeff?IzdUV}s^hOOvZu@wI%77WR7}(RD0*;GJU2U%R2H*D)S0gKz z!=Mpg|x)gjbifJLyHqhyDwu5`CF@@YeFMJ z09OEM-t)f|CHcw%)tgLlv!>OSVQ!)}%Bu&seUkZ3RRHpz9;1ex3N&5&iR|-R+y!7DbE0!mNBb-?;kh~d~nLF{MKilkM=(p z_4+t+Nw;Sk4B3;*)AjR7OG?q%T#2i()hi)WULKh6infFWkU?jVcIvk(K;4b)>(}@+ z%CsfBh+U1HkW6i@iO)Z_qK=IKim*}^>*{nHMu0kuB!pyqGK7$&viyc(=a<^8KhGtf zArQa5S1#L6EmwOIq^N5HOE#4*Zn2f~BWeQWDc~Ge_%f5fEwH^v&$vw@ney%BxF;80 zhgxwK8t`N{S{CfBE$^Db>AE)nbHTX+3Vba6MrOEHv4g?F&NIaE7J`P^jydX{n67Jo8GlNKlIE~ldwY!K3 zXKY;hm5O#@oUXznYwIkAGG#FwY2^xs6Dk&AKfA&f$g^)&Tua^AF~)dpk0Nb^dP^%$PvM*#HZEsWN3G5JjB5f5kYI7qDFbG0B@=5&`iT^N(8pK)higLm+ ztCOZ-D?{Rh2c1~Y)rqVLW!rdN+PEOKB!-w%S*`{)oVt%AHHLASS(s#qPX(LTPc6jB zT(XwR*VyfJx!QTXElwA|c(nCtzTX{GpYnSjPxt^mEM7Nyhwp&@+>F!!zufEiY@C%+ zJsw?+Nja5TxL9xM(oI;gmESAWhWgdI4o9GVd9dkPgc; z;P$>(Td|a|p=<5?_zD}{eYbhEd|jVk08iUZ7ocSHyBp38==14%oS#Wd7wCOt<@iC6 z3DgppjC)l>u7d-nQVZ6xs4^k=ap8UYpuORYy&pEd8>pcv1hfWtIEdP2OkwCbGCGJJ%~nZ&y!vz^M09D-pl4!mb{q z7~cD^5%yNLug&Sb)!~|NfX1mrdIroG(+NFB=?1>%7Cbp~0xeL-+9Oe^E z*mL0Y)!#4d6Ca?zJR+3p^Dy@x>wJXv-!?@T8L+MeKlM4y>a(5aTEo722R5-suD)Tc zf44g;W>YVQwMuZe>48?Mr7{?7n~FKP)yTzZrijxt6|zzbkR^Am7Fmly)ky zf?=s^uIWSljHjo&l80)oqO*anHi6H=V_awP%32;yyl_Y5j^nVk$wog;jGoc$>g3+0 zs?ufMC|m9Od>*wSWca*XnV27U=xVN2&1@!ZbxA#c+$5scrTP@w*`tZk*5Szk#V-j$ zSP+D?DhOed)Ykc=Ubx!!khkNuJ>FW|aNZ6oQCBmh_jjuiN>*2S}*UHe${zdls9-(Hs; zFZ2iaoSa?)7vwQ%3c-f}xzJy1_Bd%IgW@ogoa;!i`B$o=?e16t`=+wl8wcStTf{d| zuCeLgCD64w__=I)kX33=AGLAWzWjGqZZ%2|HGd5k8ZJH>V&SGmn4N8WoPE7Tl)2Ut zX}H5cmn^BZB0mQ%=Fr6P=}bVSpAcWT5oM-{eEeW3*uQ?(&bGI~K26SI z2z0&2X?%OW-ak;th+e+8`KcC1-TK90IOP)_z84TANRyZTr5<|zxz!f~7b#(R{IRBv zd~m^~wyj898_$0J7S-zWAgx!yf%zcWngiQdIsa$Bg_IzBu1MVHWq*=(`5pgf3uu0P zk=?QQFZ|E1uWpT@d1UobYBULxRE)I9x1q>SDSw01FX!uXZvI)nbtVya`QHWIbg2O; z^GZ0P_~%9OuE+#X##ui&DI+noJ9{+jXId7Gb2F-uHg(Ror%JSEKXZo#J`V&m`rao# zzs^dubI)g`A>NLRn@_>DOP}$bH5b3C9{8O*0{qW^W4Rf|@-T_xf0LYK)*nVYttmOQ zCkwk(w6%2`>Uo}Oa_J3$=T{^pv%)y3FAX!R21pqYYIw+oqT=IRgoa0K^}14Pf^ve%gfqQ zxJU8E1+!W!n^IQMf^#S734uiqb)^ETOz3)uB z7^hG9jFWtw^!fC;+;pDic-;7nNKFR@4fNx|Q4$GS%1H(v-535m2P1~p9x8`uNf--e z2KJ58l0NKpz>hIGGLRtbU0(3P#NNYDz@bh80a`1dg2+R5*Z;01Bfs7x*N!}5T+ zyu}SL>qiD*-;slZkU{PQrV>Cox=ap5(X4RKfjf$*iijduBNqbcpdacQ3cN5ZM;Yo3g61HU zF>%8PDt42O4034$hGx2gpnimYz}M?Z0?@pa$ui%P0G2uYJxU;JG;J=EZRd(Dfxyb0 zG3T0-xB7I3vCcoB^m_u9k<190;&{1CkcK!HAT>sDgz^B+LPwmZxL^c?hpt$9EcsRY zAt!|XPn4MM20t(&b>ju-R=Itw8>-g|hk=p3>Rq3!>WID$7jx}%$ilf5qb?3DpHuGT zPs``yt?j&=yII#Pt+F;sk%ijzf6ZBVR?om!`jP#<$kzm5~4W>!m3gT$IP#LXZr@;7`vI)q$5 zhD@R)sI9YGy)2F$+vodx{|~g-BW7vKs$=UX1ZGTN)vbsQO zU#8#K3y8d#efplYlnZY`+6~54_$`e+KYgQ%*L^ThP4+dpHh8%0PY%Q@9sW6Hg{}R6 z7<&gG*_v(Nw{6?DZQI?eZQI6bt+s93T5a35ZQH*6?fcG&`{KQQ?v6QP#;lC2F*7r& zW>sd6@%zia`ILw}V_%kVv(s;q)}NJFTz99~Jxt)q;$$xVq%J*vqqCT7H4EbJDk<3M;dJl3Jh z1EZpXk7YNLHyb>|i#~h$@*-AR{v)Xq>P^HJT6`n8k#oC{F?Lql4&TYg_O`NP#IA>t zH_YCr!saiR=RxtNJnapok#p86-+Qja`+S(awt8#XjM|!seJmRco@r@Vo}OAwW?CM$ z3T3GLyQ5X_x0iz>)bKY@l2fBh&6jW5?cvScZ}ip9z6d~YK=+dnqQQ<$(GTVVZf$L4 zBO;wdihf|yu06IVFoi+xcNV`C}40EKm?m@adqPTuu8QUgg*OYYE z3q(&$6R4k9bM||CVC+io)!vzT>+LL``giLlyUWj+Q2MS-w)JV7&c#lw>;x_?C7m-@ zZJYL60;Rg!yWvZ>K0u;&!G|t3@27($aP%CUSwe~WbmxU8bKRgIpvVXm4kp4zPlz&c z*gU)aZhdrm!_fN>4ZKMWD_^a2aw@HaaGXIM)Z~-WMBj}iXZSRt@T}wCnV?mbc)39@ z)3JO^>K-05*EBgoubs;YRKfbJ%T9JIE7=Cj+m{;?w#H7!H;Mc!TV8HY(EU*izi;;% zwdU>i2-|Dl21*$}NTN;epUpyQ!H(-J+yun^Gp zTo&;1Ew4KfsV-&9zljEOO0j(hgNzY{g;Xcy%5Rjn#iLBRIYQsJI)D3$JA|}H{W3ZN z|2*3J+W&63Iabj0{d$`?DxLMo|GYRgy)H7kPP7}fRCn@fodnvvHEH7ivZ=SX8+r=) zjxgJ-xJBnpqu4H0QH4ExZ@5+8^LZcs^(!2@@dnXI2H1G^J|qSUG(KjqH2*cu8mB-Y z9m-JDh34wUHOZ&&j6!K^G|`ReQD<(kI+YO(ol#hhJ)+zV>*$CtMeh!+hP$jh$oPFm z`PH<7N&X}lExYaE72FzTbl$W38L42S^KI4gdn1}y&c&&D ztEFkH+xt@WJBQlWcOU+~8xHIkJ-&&I^MYeinVr#x6Dr4YX^XpcvGqQJ|B7R{)Ik@m zDk#T)0z0-2V$ufp%i!JMQ7zdm(}|^`32w?2$GLoNrdA}PR^yAj2cVX7?cYglbNnaF z`X5R$(|`TpU}j_fzpSlRYH3C4s-RYb#05j%h!Dw#1iHhf)ze#Db|OO1j){(KPmv~? zVhlCOjhkS^Ciki;1+fI0rZz-$_ zniYS`lzj8?BrbM)*4SM(E?-`BvWZ?WU1tO6oZstyNCy-O;y!h{e3Bdlc_8vCPwd2Z}e8Cek|SRTn9DZ(5X6D=uh zD29h^ZNe}Hpq2(8grs=~BY4yF1cUguZU_Q1R3>gzT?5-#v%IpxBdC^)>9%HI^EW1f zjY;o4OZ-4S;+z^A%RB_F$dW2a0|q87l4c#vZ<2;YcN<2PhOt=5xm;#B2_;S~Xp6AO zj_?C>WC001&TEZKkR;$)xqKb}fu07MkRJ0eg80#iKhD>Re`V6gmOCaD*2l2TQk@&x zx0p|8lBU5Bpi#)HDqyn}Anu zU`AN>j5N&jPr=D6{<8Eh_xUOBXmszGZ}zMMX*lIuj?f|TFgv}1Qv*X#V2U{fCL>wR z8K4dT|6$|Ba7FxKfh{rrl~%Fu^Q+_tC7kQ4AP9zNs08pA3x`~ZeEeaU0cv?9otUxx#uK*wx$w;D)MwKzV zH#TfAkSF;|rV#^XFwB@nzCa+(deTd>%h)7@LYX8)NGPep$P|SNDHJhQ0WvB!Ze)bI zSRu|IgQ$#6ba*eeO_2#kCRm)UhiWu0znarpAR4t1Fwe=nPHafQy1etI*xtbMhAB8- zDJnTh0x-aQmO}$1sByp$(M(CaH=kctHlJCx1*8W$--h7O>X6is{0OE`H@Qv#D+GmqJ}Tq8TtK}p{OVs=IIA=Z(B ztxm6ja!8Yrfk`i4!%hNlP<=Wh+87jN$b%=o8zaKnPJ(f8Wyct1ckSe#lkvfGWX6hT z+#ZxDF|m;&+TRYb!Vw{sVdO$z)~Q+x;z6{1o_6`AKMp%VWZLAjn4|BZwns?S(7$}h zwZ+Sgx%SBtQlmK!|H2pSJ`nHQOz|hBm!Lg4W6FdEikEM4Y5W?DHeC0b>40mN)xnjY@FCYi zp#nHZhd}!~_r?f;vz9=VCcqC_5pGUoobN3XoAXM)T96?u(>N+v2xhuy##qP*K30hr z6Ky_FnvBc{g8kqi+hXDnz@h8BdNkyi0uxC?ZC*BQUQw{DG%;EjS6r~7s8UgmvIfQ2 z(#KH`wccGs{)#)D87YA|;hoG(o~N6G)9E7!9UlLCZEmmrd1F2t918INIs9aIn*fcb zmByzd16N&MULwF#Owqf&KcJ5yK%lC3iQd$wO^#jz#?|&5E!6ey_i@d1b>D7wWT{JH zWU{~Q-`aqiE4vyW>I=9rd+Z30Tmib?M(B=!gS_Zq)%Z2myw5Io2e#g0WK0p&z9u7U zQ*Re)TiuTFJRe41W8`&s6nVd18s{H(7C#@qJms^!K6Cod&7v9QP9za))wj~R;lFsE zyFZ`#YU|#f&hcU0;K+;lJ+EQ{a>5nY78%sfKrbdd1Gr;krg)pKC&hDc$kQcOWrDGs!_? z^3Ea?xFC5^fMJuq@{ISp&9U`kogrxWYV-5)6cMk*e*3P^+Y|hm{{eu$r>Vt&Cu;&% z%QI=wiG{hKW2sc3KrwIN9 zQ-C4%Q;=#~CrRx8mAyIbeLp~U=rCZqwSo_J9`QYdy0()t#usmxNsk%>-KCW>UDM^V z!(4Bs#;3`dRrU$rphw#u_EZrBsKoDI(x!g1D4!ZfY1+{6-k5Vt-wfQ%`@#{AqFGw~VUI;`uQ5^l0_8!|Dn;DUdb+P1(Q-ED9G zy3$u$B1Z?suhr4x1w-7S%@1d4sYkQ0u`0}dJpacUsXt7n^JDpxy(GHxiyacIIN0aO zh^A&_m1FxUDr@ZiQ(sHQoTxEfqKZthB5a{L3ICrR>gP8jLO{?G0twb@_*4xJePE^waw?Nvi{guE+{3k92y}nvBzBIm!~% z)b27*q=i&N!F#}_o4Uacw&JIxn814KBbuOioZ6bQ+2AnMhg}irFIC=b~b^+G>11DIF7G z8^dv4F)QTt6yFuc?~%r^8>;7ES}UB4->Yiu*+%w2@V~zRb)|uLA43+tg5L&XGz|%? z9p#W}+~t6}oJ3+XLg{kaMIDONE^?b!|F;2X0{JBi{HBEe|Fu$#QjFj7;QyxyGK$1h z8SX(0TK`g9oNRD@ZMaOcn$kIkms?Zkpqn0|zw|0IKaVK0h242WoJEh|;QE#Z1R2~| zzcX8)M0_gnpNW7H!@U~t0g)L5vZe7UT%tE^ABBvgbjcxeLU(L!mqZyH-_Qj-^we-} z9cDR1ej<`9v$LkiHoQG+aFyZ>I&q|LnJbIF9K^j)zv@X6{^MUKjEygVjZaXCDx1F3 zhzZp2|F(x>)c>}4L-Ti#|80ehigJwch9jFY1#o3=O?uYq%M$^0mPVI1V*Cn2CaaoE z6Di?r~B={AF%vj%KMEJF!md|8r z|EzahJ2WAL^`|%mX_I7d>vdc_KJ!*@ST#{V;XLKHE6^06fYSY|PnGmgUOF9ZO%yl9 z_{Vom>V?#(pj(f%s6I4qJ000jQ$z~ftpB;qIG<-aCzU|prF-lz`<-8ztf8$kMW@p{z4QV+v)0!XWko1 z34mnVb$yKaG9j&YcIi0n$wt!err=)Yc~lbe9-RFs?P+#&MMn1dP~6Wv-prqxeOWFW z@=&fxBO9_PTEzw5TN@W$4z+qG6nS%vw&n=b237d~Yc;LI|2$1PJ%_Fa?VT1oJ~NSo zm}^pqM{xw%$Ej?baa}@}`6My5BA?jkCR6CdHJjGWC_y8|^sK{u*s`;uBL6bAymu5C zYn=PLyib@|2cHMHyl)i=@Ifx=ylcEOtYBEIvojd=r(I#E0_Bm;iP5lcmA~&9T8mlj zat-Yb+Mrb%mBpxR4x_3K2NBby`rB7s(wAP+Ls(sMVmUT`g8mOy^jS0uyr72OqIAy) zP|RcRwjGbcfFnnfgHQg}JS{&IY^#Oqb&Iq{o%s|rs`B^k9~EL~cuS6dw-WxJ>E|&2 z_ewZ3BlADWUH?Ped!^=NOtB~;xqDoTpZo1j87Cxqad!n5AxZlm8lZM=ZsfR$JyVTf zR1C1bDLQY2CK5wJ6qO+hR1}#Y8?Y7yL5`mXlps3!VrIQSeXXZ50|t77$W~LIVM;LX2n7g8Zt2I`kUkd8sL%Nk#&Ir zPGN|H;P^5!zraP1B32#)lS!j`kg+&$rOg4jl4oYl)rEv%B?%hh2ex-)>dM8&Gpy0v zMiviP&QNX+NZ$#JkxUN#d?W;yQX>dNONOAr2xjxl3rQe>QKl1>qojyrzvi@&#Q%u; z1I*|pNMbyw2~n#?A$BBr{gLR;M4u*tbt)fnx-CzZ=(n;Y@rRcjBJ+>ol6~T`bVhx5vh8HVXk@7F%bm;QbLl8Ge8L$Dqt@KM1+tT{|5r3AQ=zPU{0GH zs8`t;AkRdWlL(=V5{YsL2@nkuwsXQCA`nSs0RlogQ6o0XkQJXodk|`u(G8`EG(cBbTU~&LlJINE=;IKf>l>>ga`~N=q?VT(0B?92@?YJ)8?nZLJEM01={Dz#?PVVWklhJHjrGCS3Bb zVFlp7lIq|Vic^;C0@E!TstIXh8nK5W(=D2&4ap={S$Sp~M3PglLUnJFP6f6_PK00% zQ)TcCV$p4hYcwjJW@Ed1!^NfM#`tii$rTdV}wQ4lXwun%JJuRZb z(mcXpke2oK(}`H3;Q*tGZ4yZ*9VtM$&Lo^NMlHj^7BIVSrL{#9j(noH@-2K7@QGX` z=$}~*C8F|?L5lewB?WY(Pmn=EL|PzY-tk$>+pT$4PQwGZo9Ei0Hl?@_%Z}qtgqD@= zRzffYd^1q-GW+;G?)wjm0oZC!O>WzK?mHFzW;rkWI{06f_f_{=?ELOmp3PrRTiyI$ z%SV%1dRJK<*VkG(Heb_Qo!^k(KZ)BBuNyVf88N=kYo~7APVQ$3*S>XwzU{BQSJ-OL z_#5t)B?rgsbR%LTvr8v?LqS#|(-eD4LrXt5WN+H`Fmf|G-l0zCvC9TYMS7UUQ+>?e%%+<~E2^eR+0u{3A&sUsh6+)%8{; zcCp6WZsyj_!P9uZo%8jzrn7$LsewFEi(3BD=735SPsHUN z>Sw(!`IPph=h8z;tFcf_oxj>Cg)40&3om_z9o~mQotwxF22GI-wW*0ySGpdzAf%N) z+moPL(fZbkPO!(PFwlyQ?|YE;_g<*5XyR_n@&N_vQIuiYK?yIvmS3z#H9a?2{1AOTE8=zYlx51^! z6i0j~w+;KBq}S9Q{Fs(!26|^nQr%t@43f5jjayf9j&qx{#L;7@RTATfzWTxqvUkh_ zhVM|#6G|;D*${Wp+zYCjZ*xtB+`W8FD9P;Y9ivt4J##75phI~c@H*=Pr_zgx!3M9) zBuh4$r&7Q8rm%t^y*MPk5!naAu!|eCaQPzp?^j9irS8%!%Wk^h`5KA*$dXjctGsl~ z6|v~a_&}`3kVz{wWjj$`d>0p_Bb?($m!c}nFacBVqO^G zlSB#!L#4eFjB}8n!ssOn(qe3RJ%t=+ZT;JP+{pXq1dy4(&8p@tRT4#^01i1?AG!Fp!xHoOS1)f!xA3cqxR z{cA(H-i*QJ)}d_Y_B3F}*X2>UxPqWW9Pwbc#`0IcRB|C9m{O!- zzxbE-8SG=Gfo9aApaI50hWfK>YYpYJ-7hY|*Sv_ZkH1Ai&n_nR{WIpFU}5s>$9xZm zD(yRfKY}uv)Ba0>e_diSl&RVy{8kXgWl;%dT8C4u1(DkjT zi&*nrZ{RL>aHVt$?2n#_=9?T2Ka)pYOlo70j@gMK1XDoM@Be9`vvOwzibCg>wT_?BvT`4A)$f}g9+!anbIlI`vv^ID2Y@JEl}xi z0uDdpg+yhpW+!SEB3Q7SlKVk6e-kl{cGgws*oBMuv%*2v2ps5|8@*NYi^End>_mGy zFYK@+%f%+^I>V$5`C^V(b(~)O{H$#S9D4un2Lr3h;s&_Zkil!GO%c@cqLG6S{VeqO zw1*X#=Q=ocut5yoQ>qcY&CGMr%B+qkw}77D;|exi3iXG-GWRa*@^bcB>gsyhAzxM$ z`NVPQgO(j^6v)~jV6Yg$r7`~cC|~fB-8v@!P%*ZaUbHN6U%JD`S?qR;ZpXt;lr+4A z#Q7@T?-PjA%WLsP1cRD>A(#_^SVGaqLML2EkxHs9CT z`(vM%17xlMDW(WpXVtK|DQVA|ZkN}y-VD#_h+h3=xOegGHQrKqVR-q?H^=iF{4e33 zEl>OA^dHo{eMnOO<%RGr;diVOSw%@_%L&`5@%8#9{?HKRy;e`2$3S+&EapNJ{^rTr z*4K_&)lg$q*L$m`W=_nOukY^`yrsiDi`ijyiN0TJ{Vp<9v&O!T-0ENcxbt58Na!TH zkn}5zjVRVBTB%qejaGCrRSrcVZ{N!ndsY#NW28k$^gZ)F<~mY=NNi5pRt8k~z? zQM%*QXPLGNo)nuqzo8ibSZC0A|J@YjKT$mTKZA7`*_r>L1OHFKI_k1^NunrnZ3OYL z80>Uy>7?nYQ_tW?K%ydr4Gqn;gpc73oqm>`EDb0K`HZJRN{L8ncfcDh&WA!#UjR}3 zy+w4+;E*KR)0y{OArYNk4_WOehXz}m)0|FInPx}c-jTXclsq35B8m_V3O6Znh?>|U zs_OU%oV(?W^d0$(FR~&?qJO$0<3rIj{6P$3Ahc&X0Qigx1&I@(K&lkDNCM?3gfDJn zFrjEc@+!rz384-nMN*bl*x90>MWix_tb<_f5hxJDup$<%wnHJ)Gz734 zB~VsWr$iM3MPN?*Gdve9F$N(`DTxrah}iGfsIDY?)2AuT0C}z~XXy{Bj&4t9JOvhV z+s9TH=f5C;MjQpCad#r*xl2+7OSPBSXYU+{8_Fro1vpT749Zd9Q2nbO3U#esW#z$ruMRS-h&aL1BKbBWLkI%xo=6` z>QURx`f1J5tg_MP^ltC1Hfc&c1ddmZHk6DdkCRhg2yC9pY2+5}J`7o&vB^WR$eZ;p z5~yH=Vv#~ZEIiKC7^7CyIATPeSR8@Ve*{saN!B_;dE37e@9)lSg!D344JHYjYH+be zC*IRkN5|uQP{YdS#dS^B`bvlQ*}Uy}41J9Prc!(4XOxn7?8vCAMXJ`b>X0WrLI#zw z)g(>^8JP~w@`bD+Q;^I)P6Dn}HQ#G%vs(1Qo~}+>hcxlPb@(egTS<*fWAT^Qx1rtk zQs+{Q-iOdc7bG*A?M@Tq2AkhHnf-q7$~Fz~h764xKhBA%_ zke#0IqV|2cgVE635DckGMG*O0u!`1MWfi|}6GLL1%}0H08nUiVjTen^(Rq@56m{}T zalE=Cvb61;3u*ygA#_QOo#(6tbN%s<3uk-{8isQzDEVpKxQIfKh(h}8<6)S#F6JN|oznXX zV4J89JT2n>5hlk-o`N0mnB)GqnVvREZT*~G)V&NU64 zi>D_SRlD!6sn1vL1n^J|SaJd0KmaHEh|Q?USN!ewC&xjn^czEBYFoXb+zP_r3xjkwmlJgoa`^3FF6;!;kho7*_b?sEax1}^O zPVWTwU`;Dk#YwCx4JB5qa?_}#%Gq?*HHL^?S)oMis%zE}{pV^&%mtr@5>or=?zyxh;2o#iqXD7WdCaaMqjb*2 zS4OxQMdm&>1~#wzaOE;Tgb|AgIl-8ydFz&n(+DxabQQt$^ZSj|Vv8$eC(c41HBDVA zFp|SIhcN4~c&#PY-a_Cpa-P823pGEk=ab@l0RT}y@IX|<^J4M>-? zBcT#&zx{)4bJ^2tuMgpvKF^vyp3Io`WNxoVcJedELUw{21OU*eWsIfKnr%T?9UBT6 zP-X0Oh*(Jdvpm}8>bGv#ZhV-|j0vT+b8!?=DDFS{F8yo8>4}@h9SEQNIF+`e)&7)Ve3C2&>n0kTm!_OK;f~mJ< z2ry%b0~%r3Jzdh(BH9JYDn-*scMeM1Ch?3B`bbF_V?8x`}JL{EoO+!*Zi zrI(>`l@KzqWEnf2Q1}y8SM_SK{VWr0lxT4XwqLk>qp+YsNSNrIPqVe%Xp!>n=xHO# zb*Up_{qn`^d5{~j*fId8WN^ZN&}cAm+*{Ls`CYR#q;#JuECM0Rjv)ryd3X3^5``yD?ZiQpOBQ0tcaPCAhcLXJw+Z2S`zSohEHB z2sT0hGM{;35Xo4-_D|wTi=DcF!s7-s3Pds*V;pV7`HG#4)ld=8T*L0Db`6$afj_9m zRd4uW17aT$P$^SzFBMQJOs$`F9M2M>`PxU1kiV-zw|ydl4vSVOJ7}~V;TFvql{Q6@ zTabI1K%8t+`>wL6Z&|pLSgxM=I$8bYNby`ao1@?U2{HfL*65>zDlK;+6Bv55T z(P_`UxdC?_XYdN#CBbvS*o@qU8x1^xD2C0RY-aO|TOB9)&9%ANw2$TX<(?FVjq9RDd>kdIG4s*Kwc2v%T9I*ne2TE(f&L zEpF`Q=*2t2oB(-li~GJj_a-alZw9oCy?AfYPSMLj*F*8_MgB&aeAn*fX03vY^gLy^ zG62n>x#0NJF~3KGLev)Om4XcHAq65ctY*?7gi?>Cg6)M@Nw$?We-p69~XL8#T=vPLUFB*=H}|tsW6uCF|=!YeWs>vRj#TswG}@KDW#NRVj-=fBK31- z@}G^}hy5DuuGX6E5>>Vuy$&udZ=3sGdN)^=bBL{-&Gvpv8J}d0#6RZxfs2 zfwQ;v?+!S41M)084H7v|jpQZzYFwnuO~12Ycm7v71xApZf6EB}!)F*q;$H?WlHP z3VKc$$5>s+tb#@~3F}ltEBkXAr;MwxG%CcF!V_3oBlb`Ssl(M!YAAGnb>zDjJ#eLf zEf$#FNQ$l<&H{Hfc|Uzs!Rzrg-j!5+>w14o#<(xKX7_ZqR}|A5>2sDz72E}7 zd)#5my`y*)GB;;2u_6+InxCGOtjAAZ&=d6&8&}$z#^>;hQ`%x7!_q z00&z@iIz?eUM8$dcfU>V<)E|qJcr2`a@ zx%mz;n-pnI?brH)&bZX|l`{HC>}=&`9%7KB-v{aJ@HCCIfT202GOzYOKL&!y!8972 zz;Kd=QTXOTly*tH&c;+?4gx@uA#w_?TU6KtX?HV~u}u$8IJ>{TN@H9+BAkw-jF!Ww zP)c8<9656~a%rpO+T_Tx&1`a6TRMF>bbfOTKSr6hg2spQ1$I3;Y0*{Rqi{CqU+ev) zP-AnE6!rNhnhM)OWc8(Yp8o*OS*8CiPG#RrP0!=8Z|tbCLYqSo6FHVQ&ilDlOFjK~ zlDpe`|M9pvxr^`-f@oq$KNZ73HV@punZ` z6CTN#=<)GGZ%=PEy(pM%OoBeISgx)dCyCW@F*mbgj;#UF?CNN%Z5?h@xLmW;cx&!> zN$uRM!pQJ6-W)-x{Sgc+sQ>xcKKFU%?*v7$cX7O<1;o@~%T?qrm!GKo(M2cTQjw~~ z(F)hQ`gkL~Qc;uH7)cqPVUQ^ce5K1vEJhk+f>O?(5jr{QXSzqzqNL3B7;kAXmMyex z4s|;mz683Z`>JlZ(rv)|GRIbK6jb@=bo`uK?=q9dbn=1c>;uo$4L%uJit~#z-%;c+ zbPO?xm`YqZ`k#V$N0LK{vA9HHN^!;LLL5oXx;>M@@$eK>dTL$Oj!JhAbb0ToGpAqC z`8cAt;s5n*ad!XPo>1z~_0{itYtzoeR)5qy)z#>f@44W6U!e6&?{G@DdBK3j#U#a} zcb?1hlB^8*u&)%s?DIs~x>khUj9ID-MEjMfuK=(JHw!HFeq@@H7YIg$8Q-%K28N8q zzGyDAPmU#LZi&ioHOwr>kv++4=l$_@iQdiWd;Zo64%)?rymoA8en;X1rD{XR5$yM- zyu#^lwb2O#mJkMWmehS0vKTt8cTR1U((QB)E$FgX8WBbCdfJ9no~8LRIoI9P-FEXj zr{^X|!*|o?`M|KIQq)8wm}%$=D6u#-mBa1!X0XV3VBxGyMj>Uju7#id`8E|+1Pev5 zzxM03S9+*WI;O$wPy>vAA<*>Wo^^$eQmI_ME1*ht#0kFIdpgT=WaG61Zb_DPbak!J zS{FHKok37#gB;Q((^x~lL{5lX7HN$#UZKgmmlauGk_#G7d7st>A|6)XJblN|MK-q3=~0sWTB&EzR15pdVRcBpC)Z9nw^p3; zR)AM{UWxIdJ?iU$FshR;7Q8WEQ?ja3^>lvK0RCzxqiHvm9=!}V(%MYCVg0x)@3YQ^ z2SKH8(`;eT(*zo5jec`zKOAPAem!`|Ok;|?ftY&R=E9?@nT5UG{q*dNu*$O!^i??! zi?{Lj?HyrMred(qy*JdZ^(_L%wp~XIl9@d2j5^;-3H+zi^2dsnhY;?t(tPvhgDk)E zWIu!Dq{t===;jN^<^jlNN8s1_hi&8&m#6&@-8f`IH29l@#SbjJc$))0Oym6r@j6y( zWODf{Q65iXRGbP1e>0aD+e3}{Nmr_M?ng*(p;DhSPwEutyx)#3dt21#tz=>SodG7Z**!Pr8T>J97IgSSbW;1AmPr{LjJDX&o4VUnY$YSM>G3FA)y- z2sZ1wv4yC)1+4_R0&RI4jobnHUtY^65JGC6h4f-Cn>ORlc{i(qX7uVFbDS<1hv*-Y zR()~JVzBsSjOU~DzwL>GTPJRl0 zx^XG9-4?#6U>fkNJL8`TX3-BcTBd-<+Jq2C#8XCz9|a>Pt| zB03;R5Zr2|jzA^vYg_j-)FKV{W&9ll8kJxKf~++j*3(CBl7R35?*3zfKw$Dx{+4+s z$usQs_C&)(8DqDsrt|5-+g5GlzzDmKaQn?eQX+(jlOSP%qYX#Z>gS~#21ceD22Q6- z%KxIkj~>imnzVoIoL#`GMbx2P*G?GC%f?#Tb=X zXlrRI7*s+qkHW!^e!Jo9G*@mB)Wx6VEFt~v#0bkC`qIK*qWm|deB|f^XNdhhfJ+o0 zQxIm_Nr!&72B^>jrB8<27g<0F0jVhd0#UhNqzr+?6-+>y%HK$Uw5PQQUeg*eK@jGx zS3vJaNELNVFL8^y9}h;V`s$ZiY7i^OWmojAGc2jo}gmwsoOWPqLJqy|Y_@_`8J?%9G9iVam&~gVs2#mX+1Dcbn zn!K#2W1`;H{wk9}Om2}9sSP}%14$59A>-RCeHu&qUDDGhn1dqJ5Yh&HD|S#0^E*En z6sd`{vzR1~^qiFxBsTS&F21s~QVc?pxU91U++qR>CikF2sE0A^jE*Ey;TJJ!wEZTi ztsT>A@Q`zJXMFAG%1PdqXGH;CT zqY$Y?KGt6j?oHHQ(6mxIXapx6G{j4)cY)%IG9NbK%AS_WRxXujLh)*%nRrKWbGYj$ zsyl^p*hm1y%q7Z&QR^ggq>n_litZi3z8Pm>Fi!x@PGx>mgv|=G={GwPV{mZ zZSpt)<533fERY((>T1D<*ogu*0x$j32aj3&B<~AR--Xf$0!U8M#cNUDr5o}@7YTfo zCn7aZ1W_E7wZAC~Vy!-6j@TjP_${G4D*X0{w9d2=yY~Hy@B)67qp`KzA<{+1Vdnlg z8lS*6a6HvH=o|U1V1ziMPL*uL`5e{ku>mA1b6Qh^mLN+PLmZSNi{zo`aKROm`i$}R zkNgrRHz}6zC-ALn!6QJ+s$YLl1=5|#;;6w9v=K^MzI5wa3-8f&SKfOUH5()Q2g}s` z9-g*5UV)$f@LyzghcQS}>8`bVIb7d;a%Xf(yKR5p3~j1Cv-A7jiYh6gMKlt<-R&)_ zqA6vn9S*By>4}SoZ1}&7VG&sZE&z-Sjr5IljkJw4jno;;sq#8_Nv~*QaA}7^e3{=i z?77n&tOhN{?_=XN6IQpz79C)aoD#1Rj}o^Mmr0{?TS40-V?aB>L(j(tl?4TDX|D|R zT{QjFL_mb}lc2&>W+>HGsJ$s9Z@#6+{&s}_zKi#54f5@su2_3X*=HMIJ(he8u9F>W z6dY$>Fs#pJJ2ElSJvGqPWuk9ppr7j~kMbC_5!QCfMq!a)8v&O{7|~VClKCx#eIL$P z^T1F;lcuJbnlj{}f_*Qw5!`abQ;6#Y;in2^Tjmc=S^4WS9eVvm&GbvMdwsW$^jix0 zyRP+bnD1PIouIZ;UWZaHgm_sD5`Gb{)bGSQid}MaxonOuQfs;k{k#ss6+;hGjxOkN zj+#BT{(stvzIPYUNWfbS2LaBt4`TmkP#a^7h7ql;b~wnSH4hCfzd1FfadxKFCbp(h zNNSp-GyXwh4%vs0>W|sE#MDr!|%360xOai@Gu$pULvVaUW zoyBx6RuY&ZDu=~u?j((QJ@qs)ZJ}SL*|^xsknEq=lD60f<;+DHDRjDRZl`NSS}Al{ z4?(J2lajQJj6b3yKb19^64Fyg>zT`<(op{Ktdvc0VBudBl)R*&X=*WB#F~=4k-0h~ z!({3R&ulR&V`*5-Zq~$@u*o)}Vm9U(+0j4p9?{W0;u+CVKk^>lQSq{xwlO5b_D^+> zQ5jo9)6}d{n~8%KSjWXQ!4QfU_^HHU5)YC1VPX%K_~Cs0DQhD#Y-aEOs?GA_e7@Z# zwqhzVh1r8KA%)3D}12G|m!2>YEGjo)Dn0++$)HC%oW#U10A~Pd%G;v=G@1M3K z>qPTFj0VJaNRK*2cc6_zhjhfY82{X$nB6oO&-9Iy*&CU;p0hqGt=A?%+lA~6*JE== zqY}oz2k$_4qJYi{2dPT$Ku@p#({&hE&`axYFz+@jcF`y;I+M;##|TPDdXm`={M~$?l2>dwXn7w zF__0&Ld^p#)(kl0F@!)pbOm{|o#bztF&v{)Y4$50ckl1JBXqYM?5@_AKENd67W>nw z#{hB+g<|Fd@&0r=r8{dWTZY4;&-UrlvxmUN8vKiGz7_2@m(Qu+5Jz#={MPa8l&L7P zQe-9x6V$dWqiMz%QxBZ;$1*v*4|UAm#%~vg@uL?7Gag_$_`097uRom6r7wKD?B6%n zpUn85hc^#Fo@Z;6#CIo}a7S@xYFl2C4-=z4X1qE0;RYe{6->)z7juJZ^rb{+O=ovC zDu`}WT+CVr?X+Axj|rVWp>wl(cG+tkuGjmwWmYN54jg#_k(*$AUQfG4p7{7YUN@&& zdi?JlRI-~=)PC$axY=I^o%KKQb+7L=A4ijVc%^q85st9XY(0C2FlQ2?b{l*zt3QmI z&ii>kZ+DuWbF=BJ*RMfh9Pi7+04w?&?)S~*?h@?O>)e9P4yVU}XFKiodXMj?EG@eT zp>1DGGffXSriMFbp@z2S8c%#RLteu`Aba+nl(56ksR5#KD3`!_!OFkfwMX=2j8WW3 z=bMw@ZrweV?m!cYqMe9><51oEi@qP@=Hlc_%OA+mD{~wgSZ31u)*$+4GF$Vo>D`_~ ziN9@UOs|L3RCG?1#mh-uv0c8ekAvlXJl)^+mg#)nFYZI8%hwjlR96x2=rkYfQ|jrC zh~+M$mUI5DNbzRKGh&N(I1FHme=tehAV$q$pW~h*j5W|*sncxowX}94hD`QXW~q4l zl$yOhEPj8yxY>E{_m-3|xKL$9w7$Lv;4aBFUQ?M+T1|z}}({cTN+8DaSD0b;e z5Oo?@Q~6~wTjjW~e}6naEwRD%{?RLJt{PDYwg zCmCG(QO6>_o!nNRvlO%i#5%oetES@QS3YJ~QpbsTv`~5S4Fm)5ZhCF~?`Bs2iIU$> zV99^atQc9@nEunilJt#%zXpPaOjjSFt@jQ`5eh`2L{J-Zp4gBUQkTP`RF6XDluJP* z#n1^u3I$|+@HhM|y+zzn*uKG63_^X66P(xYP5J@5SsI(i32x4GDs;TCXoPg1B=u3AznFW}lyGfE161%`rprrm_LYg9{keG?KRgJ=jk?dH6Je~;h z8wpqi8_;;@g{|TOVsycP2cc*cuad#SbcXwUp z?Y`NWjd=Se>WfoZH!9*9^S&*2a)h54Ib51+97gw0y7nPHOQ7{U57#thDnxwCVY~d$bWo`C6Oe*#%SVCT- zzzw*7rQXp?e!Jl$Tj&ly-?5^=5(-t8 z$=g4Ke&L!;8hCLx5A_b#&|qirMH^r>hhH4!X_PtJzY3MD`Io1&$?i!#Q!<_soBUTPdzJ*08m zh_ixt2su4dTGemm0x(1u*D9epZ60%zRTQf)z-j@iogKl1ich z)u{w``i(kmA|)WltW~`SF(XOmcyV6|YEpuv>( z%hGF2YuPEC7L=AuRgguVO>0E6O|`Av;F=fV--PRime=#AqE;V9pAmzT2D$SPY9n4)hK4YurT211>iNcowCll4QNf#ice7yB7%^Nc zJnicKi*>Kp^WTIGF19|NrxV|J8ikbxE{TB@ym~!iDzE2rsLJ6LQl|iHoS*UBSi9-?g#NJpWUd1Y1Uh67} zDJ{tXb@xhCg2lOON&Hf>Jtr>mOJdPy6j>E*jV@l%@Y4c6G}lS<2K_Mb-dkY;4Usv{e4q9>}qYcp`f2Vp%`^ zM66*dc$wtkG9a699VQ)N$&p493#eLP9$T#H!N0CJhv%5x4!;Q#OYA}H zYk{~H~6W{jtGATUyr3l_f=e7ug!V0>1V}k^ynBq>4DdQ94`Wchj0~Jm|PrwuX zezSI&6kEnf!+RWy=K7q1qdyR5F@Yio5_1R14VTuZLdPyh;_s&UZXRtSUU}cm7j%7D$iC;^r5oZ)(ZzfKr5m>%YTO6@cxhCs3D+ z|LSYZphd{0>B~ap60)S61$QD)N6d^kGGaV~Os*$u>~Bb#?&mRLJfEUs+AIJdXJ4cD z@K+?36uZ0mrZL89D#{)y0|=7E9065|I*YtA^$#PdBG;T57buUjB#yVRJHt8(i44vv z#Ka++qI9Mc*AOnm<>uBU{fZ`j#!r7@z7#fZkoLM(bynro30FHae z8IKX#u7aI+&RKjqsZrgjw)fYjsrrDsKs!ts7xN^x61ogQjWLMTI+m*)(R8Zboo+f8 zvf*1pwfQROSm!ihbe-SQj-#n(9?F~YCR7z~#*5O%Glop5ix?goLB?;AmeAr~d+`AI z3NO8?cFP0>afj-5@sAPf(1Geqa^$gSrdNn~W{pHJ@L7vS>Q(UBBaOEUS@!NJ)65mE{II35&AQ1_j% zq=36WbH?cg*86F@5W+qC=2r*?rPK;noQZg|nEL{PK%;$V8k4;RI`K(Fg>9?-pN|G80PxSd$-|$4F z1_t01jR>w1zrsIW>Q`kxxgU8e0*!taV1EYjMMDDUjNo(@PxOp)pyni$%NVzOp)-mxzbid!O=xP+v8(BJx{0MKQOymtx9jnLrXuo7r`o|H1T+T>J!n%z!cfEwIpS#5e>Vy!e&(p0&6#0hl0ugPv#u3ineEC>2mJz99a`8mOQH$d7Q6-Wq@g@ zJRFSej&9S%-`r;F-|B2Y-R+I18Hi6YW1ZoKt>LJ{0)x+HO^KGy4V*~L^m$17 zaTIb^uGCue?Ytvhi4z*TH-HVF#Fz+_UnExQO-)J>m1l`K_kC8@3R10B5{hK@*mOsC zGRXW+IF5Zuq{OKp`mlHHE)8dM&o^%rcdeei%wiF)##n-olB? zY4bfF>gjZPxZP(7W$>E2GG?!=@RtSDw2NFGoi74=f&Mu2-41>$u@6cKlev;+(}irnS)2yj z{ey<6oRw)2b|5J(I|@R2D5R_i*p|cLtPYQBH#A7JOB#Mz{u_ z@4bB;jLOXNF#D?_vMMuJl_*Cqc4|)UW>sZ8&Bjc0AoH9Y)m58nOlTnU@?!aAQEk(_ zJp?YxDWZ?piC2|$=cZAwW726!_OWx5Rnhj%mPwA1Q5HkhJ-qhDw669hp}&;~Dl}9=&}4Y zJ0~cf^vWJbf0XW}M7x}}%8(LOPIdO$dFpbrbG?c4AE#Ms%NrQ0X0v9~obVKxv$ilx zvv=~WBz)B)7b&@LkSviMIomBJxo~8v)S>ph-?^?ZYY#Bc?)f+ZYy+Y|3Kjsa~gOt$|d@1#4fn=Tt?lsIC9suSe2PFgvx5nk=|rA zh1urr#pUofk#dde`BF^l>UZu3rbY90kE@vCxj^IhbL`|TVns^?g?}>5h+(=g ze;zPo>(odPiFu`!4|s{5R}#ZEh@;o5nOY|Vi3Wn%w-ct1w;z|eSSK{z>Q zco{%AyNSNM*$4zkr?)*+{gBOC4JVLZa(Po7U)@g2R7-05yXb?8AZik(D{D?FOBn|N&Gux)mu5m z*iPAa)4F1YV4~#5rTKj;K{f+XuXV*N!Gu}?NpxNu%y}t`VAZF zqd_+9guWKTHBc@pUX^lTdp#=*a@AsR@U^5n7Z_wjfVh!n!NtRL_(oA?$zf7ZC1JP9 z94xlOb`Rc6$aJ@XfBz5cX>@`;JIR_cE&AAHyLy^54`(9T5O%-%qE!aN#qh$~)0O2W z2kN!kPBugN7fESw6s!Sn5A46~!1@1;9!EhkR{lp9&OIsG7rQr*;hr*v8fF&4*i11L z#Vc4H{c6uSZy*H{2_Fp=Nq$jH3*kqa6zUSC~S{#(Ju)d*cRj3EI_Fkwr*a0F;AqCzp_ z2k#n!6~lN~b)4R53mE(do+i~W5X9JztGMtns)|uO%6*6^&^t|Y7=3}J@s3gYo$=}V#6gAMEEtD1@ zS*gIPTLp(lJ#_5QJ{Dj0B-lrTQzaWl#Wam)<(7>#?neEi$@9TTt~*N^h6D_S%y@`V z64@qi({$)!&kEqE(lV7+QmyMD~ZHuA|aX=>f!0V0_!x67mVge%h!Mx^cp& zC-u!6*bM^lQ^|!Baw+UBC|f~J9a@b%z_Zf`?mI`B^$`2BiogHs1_-mF+aF)!2ZpC$ z=H!K8kGgM5TP>SL4;KoS*d4})1q~1hDih({`o_HH1(pjP8H@3fsv<(qJX9=RV5jKB zB!*i>R(phQh=#2S^$|24R+Q417xr0J`oOt?7?~W=}0H81Oho>%YTDabg z9NI23dl-3315XJQT%4Bq2$?k?FMJq9$VnnHf)Paj5SxiiV7QiT2KAbI$bj#s6sp94TR2nL#_zeTa9EK|}%`J>HMkOwTl|dyB zk1Uoh(x&o{LVl(spqQi>el-$~b4Bss+fC5S24%c#9NXBieEL|UO4v-?4Z72IpVGD{ zqX$}?QC?hc0zFpec%g5j?KJ-2i0FYQGXeY!Wo)EJ6d*8Wm|8g)BpwQt(O!xM!6=`s zvl!WaHWDo&6C3Itm)IXf`OY+7oLSVim>J9iaw2aWk{l&qUMN-lNWwNzkYZzyXQGaY z)fwpzIJ>$*q%gss_^hMviELw~i(;@;`eJw)p_eRVijes171K$_Hq$*++D|NC+m5?tO)Q~{TK&XLdQWJ%%YVM|_2YKv`NQsf z91O5=(fyi*wIthQuk3HL!3n=hYcSn1#Ts8DV!`$|$RfeUtJclfX==qUqnnPO?$hIW zvEW_Sy^V`eSh+Fp@bQQ1_3Gs~pWAKc=@4AN_{J(O%q}ad8XmXjr``GBsu};X&*OYI z%-ksp&f$c*(D#m0ajfFc`A=UK>rQ*|m?>seZ|6wL?3Zon`m;YtKg9^tik_}jr200y znix~Ny-Ui8KPG!SG*SU@w+G4YV`Hv#IB}H{a^y@($TZ=JBH!XfLQn|AoUnN@DfOO* zMo%aiAFY2MD)jC1tMx*sK)UDUf z-YFsg&Oxz*CWMg`=A2)x(D;NBnL(9WM?rv8=LtuAEVpCazH z9lhJ9<}%G@8#F$v)kYcqwt=rvcHJ1+&9l;#cc^ro{jk{>d~|Lu1o9qX3A#HX zA!r1XKV2|jJe2|aXm&%jDT{4Me|vf6s17!82~u0zU4bnwnmHdg!4+r}wgA1kSJR8^ z=bd}$Ma26LW^E%&hei(3p{P&z>P#X;o2ts>&#BJ)`6+QU8UFp6l3z;I)t|DL?ax-1 zUy{p3I$oFkbi#Gy$BfB#7ZP706a`Lrxw|PLQ)kfZ-WPbI&%h>rp+`BQ=aX^7>&zcK zU#w?jrSVTnGglo%d)BuWVKM5dcR3}`SUCetH}%QY!q{C63UsqsQTyf>PT{6>I|U?iE3%v}{M0TD>6OEr zH7m>IUy4bDtY;mC!8fClWpHAXN2r~wLgiMH6Por5t-15~m>5Q-@$P=fOu(*GI_Gt1 z+#@1ZGh0-P5y)DZ6KS~ikjs0Tzin6niFiTR%e5#+VRO z%j>IL?xLFYa8A7E0AIzzJbzNFQ4>ySU*(w5Das=$zm{cWesoDM83@=j97gA8g0BQIsbAZ z*hEocUcA1TxoMd;R*6`7g#E2vX=sXQu(?eN{llEc9}R^=6U`8PA2#($Tw#f($MTi` zL-h;x)QceK+E^Xx?YAp$NM9B=UopZw);r?VMenv^Dkn@g<@O@^TY6w$f}I;GqI_LG zIezv+Tu`6MQkwC9M}OTi0~6m>{fbe$CSz#!Vd$a%&g|5#>9*s$mL*PoM@9eg;C0su zb8)#s*j$&`pcKAGm`oD!IUTtQubE@TNRr#RbVPNNrDG0DBg~X%+6(z1qtRMw{K%8N zaRQ8y6ct(p!FAE|gSI!VMza_-vry1OuXZy~XI$$vsz zpbWA)waL=z&bY`yxT@-+mP^1B!>whB*Gy!N z`7qLjTKdjoCfq2hrORkYq5oPk4;Gt5m8{<)P~GGLhV>CV&C`GUyP&DIzG%p} zkf3QEalJyU2K6vKx-lj!D;z{xkpH+)k9BGR$E6uj&V>#zyTWS<7z5%0xgz&?Ztw?o zH64IZ3a*KoZ9DbxbE&`ZFX7WE{QNI(Aky1U&$93Pi#Wi(j8wdo6fX*eRfJVXZwyT9 zi{LKK%?z8P(*!R^z+K~rT;t(T?BP5@U&{?&B+1m}F%yc4b+ML^{jS4IOFZ8^)idyi z>#IV>#{9W($zE~r`Ps!Lj{Gk^uoXi)( zMr1?uc(-q0tWWTB_8Y&CXUOn^@WC?ityQc$r<;8y*3h%&kT*Ne?aM%p&3C~4Uc%#j zSNr?XJkapmtdqvUS?kzl3WhqsbcqYNfpR1laA58E_d9(0YJvY2k4<~?WZJ55fT!a~ zvK~X0SIeWw<&;(*%jYUl_ubvzf?MpYLY31+Rnp&{o2}6is+tq;`kWm1+DuxvdmqP7 z?{jbd+J)COoW4B_qasemx%n>xtH5ZQl6X}wTI)m7G>3NMip0Xm7D2H!Vltap6u@vO zo^d|{>kcH2eZYU;{Pn->syoY&Rq|{@9)O~vg?#w%O>c#o1l==QrnIWvMU`_CKpqSn+BU3p(KW>{8 zpu$W}hEjtWRbi@rlgMM%G>|`FE0zCz{zwC}wtG%d-sjson7dKX!j)|l^0rT`zo|zH z(878|DjxMzW9e``n|Lfi(jGlZlg~-_c*X*3l9}XbF5mBV`sjSh?w+jR?gXBwQj4UW z9u^Tdk!Lnu@;HaIZ1164y@6g0JzHT0-I$ypvN}Vh)dt8c2^Jp{&pE}8a1Za{8%rVH zBk%7Ug9`^qQ_6w|~mUiV|B6&wF2=bSur=jY0}>`^~lCi}C7UHAKx zrRgdhFUP-MH%fbz*L;s_1&E@{b5ntu&q*0vW~|gM%3Avz9KCH15f%`=H9!eu7@vI1 zlz$Ii9>9ucp>e($_>Uy}q4|#Ce=*$SW+rAPwl%as;NxQwGq-XwabOa&GH@~xF)^|= zHu>7*;OO)vD8j|^&m?;mz`soe(cra86i1dT6=-7>-Lq&%rip)i7XUY4hCzJDax}Z1 z9Kfu_5nDqZ+CRmG%48af43@JMhsBqT_8T_p$02Hl5 zY>qV#KFV1JC~0KC5j>}^9&K-LS({x7U zPZVg-4hV5meN8*MpS;2+2{t)oG+10u{IF^#(?HBNK{UZE! zG?S^W0Yq4c_EP!b1TBUzL9dgZodfi4Z18cj0-gXpEuPek3@w0eEgu(KVWzPO0lTFf z2kx1J`bGwAvUX8L1JZ2LLkC(|*-+lI$12DY&VH4f5Yu6lVR-PT;dtu2AW@Tz-AkCI zc<{}u`jOGm#GX2VUn{3QiAVu*2Fz&&SM3OWGn&r%x_AQ^OVvixksS&xH+fey=p=0D zc_P&O*w4sVTM-g1vvEri0(mmz9=H1!q(EG`ag4i=5`5Qxz$f`CPZ2oa3MRbIUp5T@l#XLN9ea5SQJKc&I zDuv*7mm6!1>s0ET>SXFrv+bsU18DaV4bj?s&2``F-7YTW=)EPD@RzLUYyNJ0JU#8V zM?p0YRyXh_MMeA-&j7>g?(e2P^Qa3X3fGpP+wY{~XurUYPPxPuO6|2Dd9j=vmt&xx z)X~n=(o7?l;7!AOyRA|MS`B<@0*#5$D=n8bK$>lktK@`9-H;1$wvM@m;cwQzJ&FXK z?Kif($?eZY4e9}G=gY?|k7RE~eyMOix47?4s;Y$)4);?Kd_8LfBOh<=6|EkS13uE> z+pM{}PA}s9WE?0Gv?c!%sSa=^cmXO?W1IRr@}7&{_f#*pTnfMcShV3VEdkxyXOWzx zPhcM-zh{-~lyN9_t5f3p8D1iFQxpGIu_wGd4*YRkxk0sG&0p=~xt%fCd2oDvDL1*m z{jRIadplXRsR_q+?s!?nccHRi?=*jV;>WAiK&KhQlQbAm@u>_BcO2Jt_NxMc{qyyO zB=1?KA#YcFY3VLSx=OScZuzX*r~6m8I=8vpebjzP)D)w4UAJ=Chespo$YOaXn5NI< z=S)ioIQkUjvLl4{iKni#f3i8xdQ0a{qezKvk#fi^4H4yjUm>E2QV46A zaN2yH%!vXeNya>c?2SP@Qij*kULPe9=X32yh%7Z{Udx6WSXDDjFCvp*2k%4&*SRyR zdg6*PA$%5qEPh<1SB)`AHpHgIi4mu5i}l&*%A(hFXKO$C6b&aQEC5R@Pu@6uEO}PI zse>vyt(O-AILkb zwjSRxEu`x#JzGjN;EcXHdg9O{`Pn9gg=i9IxUlFWRQh)AOi^ujwv6L@BObz;)_z?3 zKBkm$0iF-#o581) zZGBD5jmp==DQ5Ue_P^>$|0mXZtgIaWC8dR(^WT-L>4oZwV=Vg5Pv`Ck_wY?*G^)5v zzU3%L&lS(68Uxm&mg(EgWjHg|mz?n8&u1G_lWX-2BBEmbk@Ds9iNl%rpY#Qfg=esO z4q^Gxy~^Yv%zJdEG953U`R67sezEE0oiin*ZE~~S@|sO{I(Em_vq@FNI)X#sLgPU6 zpeG7&qd{xzJ5cT=B1LwO&N;(Szl4T_nAGxD^aH@7_4X6g`R~Pt<9;f}Hd2HxINX6pv94J9tKu-j6ZDRI zcd}C2ZRSQc%3vnhryB@`W@Dr#U1t*mP5kY_K@Chp7Yx4)F*WPpXEY&M;eiZP!Gap= z_fez%y9~Y@JERgXKB~aWUkPo<}T|Z`yij% z`a-EV2X&A0ix&Hp1zngJ+rGnq5NdD`A6gQ@6(bj7%_iwC*;{wN^;Qe3YNE6yixjeHL4lAyZNrklS&Hb>a7bqzsZG z84EM?Qo>ZJsHoXk96Out2MiW)XU5m$*Lx8=Xs*@9C?brV_++%!eO?k_BqA{K%DP`AaObb|NK5vdBVH_@^hrLpIEnFhNL4 z2Z}vTqbwC&iIN6vl*JM@IR1=PRsl;*G34u(Q`$JEHsd#Y1g2>Pj8foXVE=SU*Fx(R zsA|bxUKK!=eZq&y4~z99P7f7C6G0nspi3W4*P0P2)&Md6mJ349l?1=uXq4UOJ}sdQ z;gnGfTfFyE+7L`zB~y6MWxNtwWi7f4gJQslr8(at6ipe#FdUCL?xvnf`^;1dSwDPz zTv@2bt}am(^w787d44E4(8hOFS_}}jI>SimFbKrbUZg@_yARuEwp)vKApvPV^k-{q zHw4@meucQT9*p)dcZIGN#<16v0&usIIGn`+d!GhNdUI%n=1|GuBUr;4oB|y*Y7r1+ z2*Xh~-_~z!_TdYLg(6)Tu2u|+HRm3zXh^K>jV z?5Q!dc{jvmi1+CWxeYsZS8!ICWJp5Uj2bMtElAMYaj>!4orK85+T~pNfQz87zKZ^- zk5~z?)ijSxfBovSSyl#weFqJ71;;I;33py*XJATUwe`kY@K;FYIt+i~Y4rVGlC2z3 zKQrBM)dtnJT!1ts(6&Sb$ndr-bl8+CXDl9j;~bWD9ysyyZftFRcB7KVmaVyml_o~qIQakI0+rk0}XwFAR0)UOyE zTpilxdiGlfQtR4cD+dc5TvSj};Q~djRh+e%d|Wa$ftkuct~WD~8^#gyfKQ!cd#pF5 zZ<_S#+h#qqe5cd#LG-DevHkfzoSHmSXWhf_!ox$4?N+b)I@@_|Cfg!o<%OtmC85-<;md6S2+~efV(FoaLj_!A#yR@{q!x;SUJhG0%S;z3! zy!%eKxVBxdFDK7w#|f^@8``bjuPa0gfESKMq}Z^9RONod6ITWfgYUub|Q7S=0uztu;1Y|s7P5~?5C6M2sy=H+^f4t%3$bV;(CkQ?r4Ry z2uAw%GcOB-Mrp8|S!^#_leMgx?Dyrp5H=r@*@Y#o_Fo3~gU=g7YlQAK1R2k_vmA^Z zj;CcpMW)rfN~M^v>+c|&8y6@;k5iER2vPUH8sh&-vtSjb!YPeI&>Z*|W)gpuCNdtp zg)({6oexH-?F5qMRd2gyICYe z4u~1iPpb?Fz4DSzGt*CJmAaq+u`z+zin)T|xT3j={~7Gna}7lNzB$1n6i6cc`5AqS zu^Zgf?s)}uB#K)u>hZi=w3%dv{|m?A_9}=eXW8&#X}Btt^5@KSHewhnVuVBL=o!N( z7yalq>+qRyqM}HeNVsHS>OaEXHqS_(b9~4tInttJYW?u{h$ySztY}`Y&WKzFr(GBI zQXMCA*>z?u!1!N;TjxHZ^;&fR{a=K!pM9Ctc&a6+Y6YmUM^;dvSs_GbJHW5E1aHm) z2&d#+e6OT93hI4R#JzvPogL<=O@r@)PN>O`Sygv6!1y8poO7SydaVk8UJU`R%?5iO zfz7$^L=i~zv0VLqJPVO07uC#9w%0SYNP#$d#f3hv%*iiI7 zoj6Sb578rm%kA5_G1i|gmrtkD`43pqDo-;pk0b}@bCmMyTgHNzD&5YyHuic4(4kEq zAp^cS-wl)>JG>0O zof|=e-raEPD;L=zPLF)xf3fh>-Id6u0BMwfS@mChb5ZPCt5`W5?x~yg1~=B|s*mHq zat!jvQvGxFo6KXZVIk4BLHOpeEAM^F(;>E)UzU}4?y|dXd`GT-gX6x(Rx&-VZ0VcT zj01J=`J*1-jcLX1)2G{0*HTFL*HX+yd| zQZf_MIP$!p(IJz3P7mrrwb)DZK7OHSbF_UpT=2x|uJf+-lJDE>|JZA6{6%n4z>O{ZM1VD0Sw zjq1mbA|mRIYTK)@WeFN4omHI-@9oC~xW&z<%NY5tE}lo{$>?*^cNCPy;K*P5t4~wz zZz-oq4@WeD>ln~gB>mj&w7$`Fp&We&&qInjT?rLzvHu0=E^gt;b=?md*^U^doE7p+ zJonM;Y!9y+JCcNNWyz7ol>3sM(yLIL{X?-g1%C1AjPiCzo9mkDZicU0cZ-u#^gmQT z3_lVMFK<}bcwg5>vwURBo}1--!g87mMamuxZ~JZ(8frn5LpI*-9RVB9p-Hw@WNb8> zEx4HYhZy`~X>L9k{FawBAH;tH)}{sLqslL;HDsBNkuBA{9_IFkCcU{DYp-_V)QHmC zzduhukQh!zjayv7{Z`ZfF6ZNj`<-}f!+$PW=O9WThAXuWFk_ay@O7aL*r-9}8LI06 zc$*_;yfG#f1L>PRV#)Ky-U)}_3CUM8JJc?}p7$ZU54Sc8RcRayuPmb>lY7+UBao_X zwX@YfR`&`Vk!-s>ueSkR3R0tNbgNKfIlrfTs`(q^vDBXBi_}~Bt|y12yEXW0@6NU! ziLI-x>GMR=1AOsPT)vVO^+^UREO^N-FBZ;6)8A7lXD)8#T_6xWm zk@WtcX8UU5q^B;J2*eo&m4Gdrzsmv--|Da>$4M!{W;`*?1(v0>W|PSP#KObugAmMt z6V^R5v7qWAsP%6rQH~_Pu_J{W=*4zBsDnieO~;7wEJh1J(z}l|3XknaSpCVYxqrio zuY@N+7FMBi&bkLQF{i>ol8n~O=o9E;poN`*AJz%VSVhx8dh2V~AqBugkLW3)7m&@c zG3NK|Ejd{PYnT#9YRSz;H6;BB|8kLuqY9^73s~|E>K_m9NJuaVtgqVEY4a*%jlByls~sC9x;Y32y51vP&0C;M&JtWcmR zgR~K-Ut~>e|HP5b90>W$P9Cer7ACraiRNIuCb0s`%4j0qfQpOGITPMalS(S_CI5s;S;7a?Yd*oNPe21^M94FJQ9$l~e>a+4tYzm$Fx{fgZV zpbAlv|7?h`mdAE$I2Ds$(UXRan@Rjg#NSt&RaFp~RSkC{Gps{pk%)sDXZ%?$5{m!) z_XqiyL@1;0PSylj7jfNQnBb^xeEpl870@WLOC*HT-k-P?#R}6==Wm8dfAt9itB(kt z0OW53b(|#!eByUHl)QvZ$;&@O67zx%rhw_K(BA>Wg>aC(GzJpM?uEoq(2{%QbPj|C zHEr=SF<+tK@u%8BQK>1if~vHqUP@pdQ&b$Z_DZZS6^*Y5A#<&x2}#|CWQNjyuMyP; z$f&0c+6gO~NwtuU87dm4y;)Mko9_L=@KfFi!iDM97;y)ndV=BKE8`JhQZ2p%tyyg%7wSUHMc4gGJGOSvR!HVZdeBy!kVjuaE1fyUY4V4> zlO%ouiLdr%ond)g-O=Iq4Z5w7*ZbJ0@)TMHFD5`W+s(`5wsCBg4zFEJm%I7(sOTJv z$V-9ua0R#of`Gbjn4k|&faJ%2J^Q?fC{8s=^irhtYOVdt=5X3(XzIM{X02%AoakcX zb~s_^l7h@g`)=Fox6k|1eN=_*x%TGk)twrEU!&9Bz~t0Z{(buxYjWc~p+;Ms+xu}N z% zVcXpV-p=IT*MX#0@ymS;^*c}`mK6ON%PrfF&d1gJ3iyL$V{{k1#>eF%v{yYN=1rI; z`#jb5-)Ki7_0$Yz+0mIFuXsM5AJD=FHpAybfksNlfril|_1`)vCBD;7 z9;CLFSU=aSfsPX7{%1f|38$qsh=V9s~x ze(B?Nns<7qi=Yii{=nHk1EFRJIo!do1H3!6pAmUpju2hee)}Qr_aq>>Ffb!S0D0Fx zkVS+K+u-u>3VCY1@aeSOWJ%TKcoXZ+eS0;T7P6=ckgxvULk0}odF!BA@pv9>WlL$U z(e8Nb^#?V2%v|Kw^>L0m$O2Uc%)_UlBtbbRC{ zi5j%vT6deUnm-cO*-@+~;8^|bggCo?O*|m$jNrB_UuWTOO&^ifu3tMHb~n)VUPs(2 zSBPeT=Ca!GESFV}6_fM&&TK0VzU)e-_j)t|FewAW<3XE-mdVU=>e^k?xlCV;FBH7w zIO=3H6HKXQ)@^(1uV)j$<(bU(T(+_D>b0DhIUU+~x74x)!F7Bdfr6_!J|E(J>hrZp zndfruS>}4aO52U$b5I(bh8`cv#^~MndtiP)c*3S8_uVn3a<HOs^DxH=yVuCHWDBucvMX89T7WkzNz>;2J^`Q%LycNd2}gH{*LH? zba+aGtrA@PgTyWbwakQQi15&}8bZf$_shZp)YONKdXl!$Vrwat?&>;bVeL_)JmbQj z0lC7V>~<%?SS6}i00gCLZ^z4Q(yhNrGKVCPH%^Wt1Np_8=LVL&SCj4X!|Qyc3W;_i z#~b(_qjd>)9>KU+C7puQ&#f*)s2E0CY%evb&hItk4pD28b2XL;HdgWF={jlvQTqeT zB#EC(8)R@fAu~}c;WTrP`QB;U#J)HA)BJ{$f##8F{{x+O2&Du(A~IJ|zPC%+M_O8t zVZC&b-;mt4-AL~7perS`|9E2pahY!=uI2h?V0Qq4bqU1NuR~B-bZ5edgJ-&^>SPFsCJn`VKxH= z-+LaRd;1VG`|Pos&=!#x0N4$d(}s!Uf+~8!9Ma>GL4a>i)X7m9r8QpyUZXdtbs z!d0TA7D!bBq|t0By$v!>_D5JLg8NX3?zap!?S^T^!DiDmMBLahx5&Ax1eG=m-^*X_=!H>=$bxTLVKQ+Nn|UMwm0NfL66 ztai@CawkMCX3pdOFf{AH;HB7b1Bv2VKg*K--t&2Muk4v|Igg7I@M1F^Fst7FJ)OW} zr<4mWD2ue(q{N^jE8wHM&mOmeTge9qInPR z{W&7)SGd1!vyCoRq`f2xi@X-47tTvk*RHiuc`Mg>{>jOZ+GgAO&>SdFl6@s407~?2 zre1H+pTPnLt@8q`Av8j>e;`*5>EtfA9h@O3FS%Di+5mg-c#G=d01WY+$K`e+58%U3 zfb06)weAQVp^JvZpMz*GDOO}tfY{Xx--=eLQxrIBo#bVUV@;*ND<`5p$#;D?2Y=KC zdJ1ammhYFPee_I>ft@_$nl;5gFjF&lM17YydH|Yns!JcKw^iY82rtPIdn194rIpM; z&7Vt3*TAhNBqPq9K$_g1avYpsyuH*Q@#opdYnujST)!rpQ)iw7lGIC-f_^pnYu<}g zc^E3ON~Aw&j8M?E8dIcHdN-yAX-@RAcFjvLN3qY^mBnf6F*kT+M>rnYB>gBM)QfIt z=9`-jl}~h2CY(yi_@y3%lR~!X@wU2)^`#jx-h#*7{eE-tlyLHpUTSo(?;qHci+8rA z74ooT8eCro>H3g0>7e|jH!pnh&swtei|}= z{)}=kd2Z+Viyg1jTWmd>NEYO!<{$2t&cFWEkm-Noe)-=NKmg3l|3(2sL*Dl1S8~b{ zwIsksyY|ajM#5||lg$U7L_x~`8^gJ!)$p!ht~ar!R6vmgOFFW4YCMP{))nX-SPNtU zUdk^BfR%x;&`z(%MW$y7Qfa?u3H|7?(}C;9`y@BprMq>3s;2wLCbew>$S9XY{7-$O zcm)lHcxBF1a`zzWSAWtg$?$L?eHdp5SjnAra?9Lr2Jw~Q$KVz!Gm7yNII@&sayS7j zVY)a18VIB6WT|lj#*DZV2Pc6h@DXyV%P>sPgS2P@s&NC@)VoC=uaMCmT-nl;vhoE;0u_t z;i$Du)MA=dm6CBHmg)`W0T7tpth1UXf@=+#q#r3FN|>TS`%VTDoa#07arkhfJY;zJ zb^H|QagG0rv3CHHq+7R!+wN&&+O}=mwryL}p0;hsbptQ;qY_6sV@DEh8CNQ-q-@DAfVdwayA4CC&PM1wt`GEMg10{B%)ej!#!~^4QFW3mhn_fQf1+5 z7P<}nmZB7uSvW-DKXM6>hh?xU+6U9g?3MG<(ouu4Vwy$sA%vBp!V&bSOGA1u@|lsD z$-+S6R40vOJnzf0&~)S{@;PS0T{P@(CgL#|DUOTOd{h9^^$hA+7`8UeuxV^y%WCS% z2DYx8A!qhNX;e8nB9bPL1iO_)kV?WjciS+9ZAZSU$TUXAQe{zmuP_NZsMeXPywL~)>i(EB=HrtPK<7{-c1S%Q{P zrBHMilJr%|;#f|NnYhEwi?NR+Hvbq~3){&0IN|@{{KR>lWy?3bT!$1j%yRGpfLki~ ztu!X5quF%}5xJKlx_PXnK_VQ)z9d{2PavH{np&I+f~b`~8I$p9a4}KdTx#8V{P^C# z-3UAL+tK-AJE!y4CjafU(=bAz;ViH|k>R)R!`UvIz$iWKuO8ajhnJbQmtH_ble^d6 z{+jw$I*;SY#qMEaqPUl{IfASlAOc0rWhMLsxrmCzYelWBBu6H@hwGQu^}6z$f6yMw z=C+5=8EwD5{@3lxRIAd7Pd>$v8pwW!c|#F_3>{P=?7%@FLpljWV^ZYM0TCmgG@*2T zJi)nt6(|#)3D1~E+|2sBI`{l=MW)uI(8FUt04~jwK}S#{HXz#m$Qc zN5}kf{!{8p(0TnXKTF5Qg@C-|mAt5vXpHWi-Zxsqz$?6iO=UtKsD8mY|lQK-aXSz^`12vG!N6gYpq`D7Q)Q8-Im(3>G01_o9C?Hv}rAvjb9RR zb(ogt^+tJ3;Y%)#+2eM?{kS7X8z5%OhGw|`3P&4|M{nT&#EC(l%>H<3wMRkm&JD=L zRs`%0v-9P|Y9zvbJ1>3pDZP(8HbltcW!3AG$j;y5=eJg_ghtB2%cz-ZXuF%-(+dVi z{ZTq?G^j+_0rkTWa^3n{)a;{xcL!&?{qVd!xx?l8n1hxplx4I6$=tdgSQ#o;CUDSPcdLPKUodGu_TkKvA1Gi|2yPk#@ndJI29X#G}i{!ixYeja17Z*IhWSDf41wBXwZ5YwHzRd=s^@+&krPf-{;Q&+;+N`{yt_Os^dM>pI?SIW zA=K~^uyX0uk^}*g3>d>y3Yq2v3EP4s(SmR-`$|F?MyR%i225c@#(E9GA)aB>W?@4l zg(0qCox-p_qKXE#VWo;Nj$y2(Zx?xO3}WpdA~GWFAhHP!Z=3e8v1Kev$d*vi5yUkt z@Snma)+%VrUO=eJ#&f76{b9&K86c4qb*QCD4Sh;R@n9qU674WF$&|@?brS`l!H-2X zU6D4`Y$5fmV=(9W;sK7rR-y*!)vV!u(>CyxeN5Vg6bx=`NEB6aoFpN@kyyxhRxw-+ zGRks_MC0+3Xe2#06v9bmsZ&OiL@AW5B>6{{V`a-6VLu~JXl*Bm6E@={kJ}hD1D{MY zN#iK?PiYw=cQZ6Z74OmZmNODySFzA-O|4OfWm`1MCdTq)T|N5O(^J=_P&Ux4We~}t(<~hK z)-ZOoj1)`bg2wI%mpw{2?~DqT!V4)GjU6s&u8qzuNtZn)Jf^GytAQhgvr4NJwBoB- z;ZYar3t|E~Rh2%8w22W1aZI5kwF5+DmE~;0xFAH(mlz-+5{|Ih8AywhiN3!CDHK$A z=*-^*goby*@-cJ`%~u8(YgiP@YxbBdM(ChahHVx=Ep#B*AX2I#En*rX7r#*011iNL z6M$#S<4C@X5Hr-_V}ulx5o4iV-6up}HQ%p@!!u#bj_;Us&B7wVu;wK~D{?!422kuP z1!&FqOM{QhwaTUyM5Q+VM5&NKIX`m-uELE3L-SD3AkFq)KpyrwArS?-)F!h@kn1B9 zNE!#BL*v2v`9u7ND;qa8g@hsy9U7`>hxa8x^;REF(W1%}iYe<1R295LAwf~RJ##~jEH3DAaOpUrVeY{s<|zlE}8AI)}*THM*C_g zYE!qXCV6mnEMX=6W}<06;$lyl%F_4}G0aj&)++WM z(aznW+O0EqUCy_8Vjf@`Y?{q?QmH|+zMWc++QjSLZpFQEI6)S$m-MGtZf*E}@|!ZS zL?Tvw*LN6fN(%4NDZ9*Iv1LbWX}?7$rMbUpm~O&)8j@~GYJLuDq0ng)Vw&w)1L;Vk z)i-DGvpM_nuA%sH(KNv=MnI-rVzbTsAX)k-HxhP|OMG?Zau;J_03O--!cCmbuyvyd z%h9YcO0z6ti>}~r;1-?a7I=)q0THnV9`s~`p97@<=L8wB$A~drR(_APgp!Mw<*|v$ zkFJ}6ZE!mYo*M?;4e!Ui$@0nWWa(I`bXB-;Nk)>R*SLs}W-aZ=MiFOiXtG01=kk6M zYtU17<7*go$eaeg2I|&Qy|m7@-sko0$JlM&&5ho#?YGveU(bNu8GWC4+|!`zjapz^ zWA`VPr}@)AX2$h%sVOoQ-&#>@M`k_whI5D(P&T8WI5B*zeUaDie+yAYJp^won3tZD zwL2^n^C)Z#T@}m`P}3vD;(MZ1%deHp%hQ6%GrUBcG_?Ay2iYY4&gXrJ47Dm*Kp&=%IQ2oP+$cWFjCZ*Ds18AG2!S=1fLBBkPAdv%i(Z29t;{f>=mG-X0=@m zp^?{cIm-3qCDNZ9z;e9^$@Rn~(jOeaa{gaMydIsnYN^I<(`gT>{95kkl#jxNI^(Z< z)Tf7TQ+{=9YuS2SwR+qXU#kb=M$HCat!BTa*EMs|=Ga8PGgcA?YXc1i8ccLJ>s*K> zKKKe>ER{EwGK-AMpuBZR!Qp*BHgu-o%i6d6IhwV<0nF- z@D>AdQUT7^j#RcA=O`*y>z+-eg!0!sO*wE8*=yr_LaO!_7vAmo&@)O}Ke0B^urTH5 zGQW<5^0`??GGM4dg*rhBtj{T!&E<*BpI+waJMIypwCWPH7%w7Ba4aDW)18Mev*y6m z=0*4;b51wMoHfQ!9JtLZC1I(vrMa`QU*OxOINbx;wL!EsPj$Ax_qa((q4n&)%(`S< zztsy;>(F#-PZzVatecuX2r{*IxlriXS)88NLSD?C`zZ>s&%|Dda0KvTxgw~Eg1(3v zAM?`Tcs$t@-Ou56A)EaPZl?$Z8=MXMe8!yx!Jli)GXI+`m@;^7{MtWb?C^Jr*zL*G(+swGEzr z_w#A57pn9kg;3bH{w?4fLquMy{CIqBt{vak;cE0;V&WA9l+VIhUULL{kdE;xl9kYi9W?w2qXg7mLD~Y8k(9x|M)-B-w0nf~D}O`ZJ*P-Bkxqbl+&!qV)gz0>fBA9E^lF% zCG$2vwvo@h`6CoXaB5ZXxp_5&lanlpf#isztdb>Auk(%8-0Q<*_FreP9cFC7$yTI| zgdI&1OvU@d<9dSr*;7H;<)9_Hlulj~ht=0z@xA7?_)mzS4NEZIzF<$G<@{5bq?6}P z7YR#v+!+wu8KIYjr%1mWYaM|=TQ9;ac;GbQgb^+Tc9;QIp|h`2IaVF>&}S++zF6UzLrc8vFkz&5GZ==f#qDALVe?5 z018WQIr5fKTzA`L#z^yOFb>K+%l_cp*Gf%Bqkp{s;O@IkGDkeP0HEp1e7Av5ZrxZ9 zvukfimHbCm+tE-yia6h<_pb8AL+bW2k=_J}EDb5pl-VN=wJn=sfn zo?ni=(K9415)3anI@aE9T0Z!EL`(#QqBblz-b82q$v5I3NHzI) zo$de3pplW|zw?clSQ!41o@M%;ep2ytFr}9_vQl=j<>Pa9aWXZug@>`&F4CTiAr<}c zk^CMM(P|4#7%&84MuN!ONsT_`kH`ROF+}tCjnh!PLrJ%lirSZb>#EIjAeO_;grk8H zKA+Y$xYzSs7<|o%E{>v@)>)m>zE~xBLQO)YLc99OdPB=7`E_|+!P16zji%|*uJ?}3 zNm;T*P?^^BT@y9_UaShr;yoBgqrA{g; zhmrj^C02_LUszqYW zw#pD)c!vg3SC<$yk(FR2{GNg{gM7Ja^Ad2piymB(nyp^w*pt6aF*|E1X;{G#iv>11 z#k*Qbv2rjB(=oP+gfceP5n5x_ty&^@#kiWYk~4!sqiDl%^?=*ATSxx->w$kr5qsGA zTF;UxJ%wtfW7&e5H!G$J+%hDDN?bZ~USM(%OP-JoFoeoj-P|~{wlR&D^a$MhvQzU< zr~*;*o8^fNb%KbPK<8?#pOp61*fZq!F;%rWPi1gcjQIL-x_Oz)LL}JMTl6BL-NI}N#|qY2d>krU?GOl5J4umYMYLf9 zS`=MSaV`dV&@G4yO9eK3tRiMd*lGnbH6Z+9bVD( zv#Ni$FGsa%!@{y`mEZ^V<;KaH7^FxveW3`P7K6n;cn}*KX2lRwipUDUwc>(;XXOHw0?$#W&r6I(XgqL` zX5%7o!!C~Q^o&vpuxU`Vz!nv+H?b)nb%fJ|=E$L~$b#jdcW$Q`MA52z>1c zW~7#L&5Y3)d@ZY}+&T@K#T8x}DWk(?(BM0a8WgF@wU{!~tgStO^YKMh3n9p=XfqSDe77(h z_hU^{Qn~vPWqEVlZzIz)G;LJWWH^}Bd*6v7w!$g{>t$KLWr?wo@|S{uExUDoSVWWR zN)YsZQCS~B!GI`o{+EMOdz9CQ=$=BCt|p(ihiQ2VV=_OF*PGGjUfz%WT7EyD*PG*C zU(dDty?>u$zg`{|LMo9qr?&%cR=pqtAGXd>K0c0j{JOd4R=(cBwe`pGg&)>x`M=Jz z*&D0Z4hy__FZ7(BUxTiaou5Mid^gWQZifA_bIV%e zl@pKMc(kc5UDL9h24HOMmwB5la{2Qf>2bTyBxFgoAL&WgtJ-shQ48us(+SHWka#{G zROfUptu(*7Df4<(lKZ)OvG2HU7_MYPURalJsaa)8V+5`QwITIyT^#g^8{+Wvu+RN` zexrQekh=6rR>pyg9CF|VcjWYclQ}hWSs}H2Ob&_jCDhXgxX~EU?)3M>3s1Mt@Rj0ZBR6+&cqY$)6pP<0L8A9F zRZFeYxqY6ob20~=ojvS+%$z&=xL!KZ60g*|t-XI9STSnE_Sr30Z*B3~**%kSNlWob zPkh92(xKx-35iJgDpV^rZ*#e!DZGxy3M;Kh?J7Bbtq6cBy5 zIo!xGjGkr85FR>Duhhmfk?4m$VYp;UdiaKoTAzeXijydAmA=E_cd>yyI#NM$XoRQ@w@h4@>AT&~>3v`fedCyQ=UD94JtqGBqZl(l z_frfTa6(YeJ=!5OakO!2YB`SIS9t1qMrL)30xsK8JQxgFp>}fBo9-%f_Ys>htHcf1 z-#Dz@-`h-E`oh1Oj%BH9Yg&>h(NSXhNx=3|bp!P93_A3;>;4DNBc6Zd_TkN+LYch> z(?@S@+m5X-j#cTr+R=xQgO;E!%yPl6fVu1nzRwxsFH7fib*pD<(j;#hGGd5A%&70r z*vF^r=GObXyGz6GW^zrxcdml@`&_oi9r#8K>&Fh?`&sxn$~5=Y#g=P{p9*_TvAP_! zB7|S=h(pjrr=%v7$7!w`l_aRcti!YpaZ_e7ty^mcuEf#Tu=vg&kK<~kOO8f@L>wc>kQAVl|hViOjkyPJM{8^iuu+Ka8XlSPLpHO5|Z{wmG&6&?xS4gtsQ6@E@t zB|OjW2_Ml-KX&PETg1G1f4E}nD^%i#IuNP0HXOYY!-WgO+-&L$HHAzasj6YEN5ckT`QTGJ5*LGPz^0s zCI4mALPe0MA_Dll6U{}Cs-tc(fka|s#)T}BpydpjpH0g}(8@rR`;sEo@w%-VaF*ke zRl#a0MveZ%An46~2R9HwMulb}Y$*=671jAgMnLP7=%5ktM#3(axR}In9B?Z9zGI zHq`+Xff>S=oi!2XA!-~2to!4kNpfWQNExBX;qAj#u{Y%uVIZ@z%Yqj!=*c#J);Km% zKy3dBwx$ZM=QtjF3~R&l0NwL~o28~iVkbe)3u_~6k0IJ4+a^VNV?HHgd@=W2Dxt0| zs9Yr`AtEtQLcq`Ap_@8ju|qgXMP*K0z+ey{aCCEeI$IkaZ$DRmOKg;0NtvPT_ALJD zk0&lNjcn41PobZO5!I>}vCb(ax8q(Y8&rElvA@oX%8-E1YLII5${5#PiuLvQe5E_e zU*wr_+gzM_Qftt3(!9eKn;*j(mBjIl#*0!#gfg|Nmyn$VX)Y{6vcNuOjybaIG`i4% zjVtW%>k64YT!~9t&Otv&xl| z;+2xR**LiplFF7WXGU`^DFCP}rbn!sQ<_*3Bc_wGo~dn)RO?byW=G!rK6rjo4aVKs74qBMoFJ=B!JZfnyv^6*AYH^m` zaKxF}1tLOLOsF#s$9!w=6aWv{oaS0Sm!3Lz?(cUp-&b z6K98?>N`2FO^xmz{syw7H2kuw$f$H8IpAzFAmr2wzo334=u4F^GwNqFXZGrO#Mb8_ zOEW~#1xQ9f=pWF0c4RZ(r)+aB&?#@5PISt6s>{EmtIK~db>;@yTpQQKJW7Q~m?wnO^Ud>v1fg)6Y>i1gWOBGF_!z6n>}qVpG4a(=L<&VN9XLfdhk>D=aO@zuAg4Y zQk?bkK@RHEgjI!9#rRP@XvKW+>Vp#-I*hBx7&#l^vlzpS^+^*nT!q`2h$^&bc!WY= zpqG{iaRF^67omJ&T&d*P0?843R$43#5l=2O%El2wO^M|Ku@|?o*W1D`YyPd(4NjN4 zo&G||TAxo34#(%-s{p|1@V0xl@W*fVU&I?d^H1js*T`~ZF@jf;c3Z2RbtBh*8P$Yy zyc|!9$#V#bszeU43sp!NM4C>-^x_Ngu2I>|QbwlcSL>2`?k!2PNfSxAtyW{)BPuhL zH%~^mVpLm1Y;$^-tUmB~l~;e93>6PgZh*LYU*BV7%a_e=U)8&tY0+m2?_-X_0#Xl2 zlFEmPnx7OJ@<4i$%JRVcEq)-Ko)4QJuK#0=vr4^%^Y89z|A{ru_hR7x%ug^gv;Ob7 z1UA{?Nb1ChDjLac4kwnewn%q?&mCmdkKaiGM%>rw!DDt?@1C|oO6(E1sp!qcie-UH zOXU=o@NGcJUZ>FEpzLxI#gKFaBq~4J3G$`NDpV?78M(jxG^{Vpd#^VRZkS%*r{B%Y ze=#@OyXU4dS`mgoQU-lfR78OVNudQOj3t$Xq{S1^#S$Sf4TU}{(UuR)j8A4{38FfwRagNS)l6NAHaFOQhcLEAR=o+R0sjY8xHjk_Vyf&g=iM6S8| zOpo#G%RvVv3KA)SIw{~f34?=($w%2OW-*8*>K=#Gd$Kuhj+ha(Q$#r*#H0>*$XaoD zlL6)L@}$S@JcgnB`dI}hr>{tqL&|s^gS387POUg{mD2FY&!fQbdoZ>*jMKQbAJce@E5VZcQ&@{2a55fVW#&QXO+{)8eb=?!@Y0inbKCu_P{pVg)$g=>%DBvSo3{Gf2QE(J=asoLJd@WDCO}w7o**VAkt7;N7MZqQ6qz72Cx+Y%716-p ziK_yJTn*LX*&lA8;@4j&(M&OI=@1t!idxPmP(i#6hKxk3002ei0xLlJa}W&0!iM7> z<|&{dT`)!1{}7H!gvuL1rwyeMNm1tCOhQ!vk+-6#tOvB5P)7U`*-U~Zj$W4{k~#QW z6N7e|$AC5*U;-Om7O(%hvGn!Z~nRcV!Dx5W9b0i@_3T~}GBOwBOt-m0F3dqwArKYeW zNK~Z=jC99#;4$E0H5gl_CDB2cZA^ESmS%N~Q@w)ju znI$-e*f>4Ui1@>?+9~}ef3V4eeyboS07q^{!g$j|d9Bu%lZ?~TPyTrCjBNzy73n)p z5*_(NY@q@8X>RD&aC3>axufH-N>c#D`*$vl9oSi@O1rYGSh^RE0i|GuS!S9Sg*lhe zqaZ-ZS4tE`IA=60jKW-u2qmsRJ%MqT4JQn`byq;94Ia{HV49CQ-GLdBVW^z9@?D3N z^SfSae~uCctTETU(gCGlCRWFgM=;OYyEne^lkxtbMg&8_A(#H)DT60(X~`DJ67Xna zN>u2?lK46e)bJ+!Ox?bU16EBf52__EI-X4KWfqMo?#9Mp27%upJM;FeC^@5MXfXQ}bq(NlyA1(W6oKgv-27i!e z%W+4SqzX&j&fw{@wX%y!Udw0?i!Faf+P`&2<`W;Q(_dIwd_EvJcAHFLsGe-S{O;wZ z&^sGxyJX{7peJj|%{VVTdIR{+`-VrrBV!lFPiIjsaY`m#Mn)IIb>`23Z@7#;Wie*S zQ(fs=qr0&_&!#_8m(tP2_%->>wBGD=kMku&lAjFc)wZW!9O4a|a)Mg0oIr=iI=u=VN}py&3Gk z>sC*>mh5i`na6q!d7mpph{r8!YGm~@{&uSGul2iIo2Osd-g-Zd{7T2jY?-Gab_Yb`Zc4wi4UZB-K}e;E=;aH`bvW=g!=uFWBOZaWFG#eHg!#Of3E* z@tL%;`4YS3b}GG=#*Y{L`fN%1m&eOaZMU;fj)wvs!Tk~2bWL^67IQCl+x~G3u2iFD z7VpynOC-7eYFkPUa$F^Zl*-Q;9ga?qmGkT9ZQOUS`;g&uXTN^KQe6bghc^^70l|z8=v+82Bv3k3g7&sUa!mMY^o2CZjPJ6|FU_ zT)&(4H|G=%RY@)@?r*Aj%wdJSs%Z$hx=(mavM$6oaY`#N)!PF9+aSR~=N#n0g#C!{yY=$z|5ee~F*a{bcGqSp$egKb&- z=olUHUfcq#IAdeBRRXTJ>+f{C`k2NEN=$b3;;0n&hBNC|EqTt*nXE3Y4h<%JljfIO z^>IWMEUjK2D_2|7%lCU?rqZ*I4&`mZ5|`rg1$DaG>O@lI%SC!UulH8jKAYnD#!^m= z8a@qXlQDHHt&Jzj%@k-EooxP&hfy-K=5dFowR`iGavf36Oe1vb@ZOfog-e2uScGF$ zsj6aL)+Gxsb=MhHUWXN!&1Mky>b%O%xsd1MtI6z>p*vpbT%OO7k!F>Ln%+hZZVzt< z7ar&P#@ucn@cHMyV)+cPur^lPk{%{I{>y7E(R_P~qjk>-$~ zlesPpujGpksZIekpJsQ=YIX5*>=m(8KvfP$JOtl!>YcCoeTZ@4+^D=Ci&yKeVp;Gc zPlRt3Vk}6l!M~6IQkyUky!C^dH&!i_-Huc!>wSLHTK<>!&C}ryzvJkManW!oyWQbW zT~BMfmpcJI*W(iftJ1r^qn+F=-p~Hc59-08n&ei9yOGk-&sIlT_>QDB12?aQ5HVOt z6y{dS$JJl@K3~(*=J;Kn?m_`pNtuHxX5x;2TiewSfJtm3`UmdrLKYryKpEa0?(tV* zN$`;iD)2F)4@OGOcQW<$06YuHV)uG__{2jEW66|v>z;2SWK8!&%=Aq6M&&N2IxP}? zN(SW^!j0ZKbcJ@b@r9d~rn#gITlw>b;W{wJ!CYd;?+)Hk1sgD9>RJQIZ@HEMik9Zy zA1IZ)Qt5o|EA`QvGZYJ^#dE)V`7!AdNXy*lt4;3dFw6KxkgFGpV-m14NCy*4$LkNM zPZ7KqdOf9Ovq`k~&zn4gO8i;VcX*3DSKwrdf3CBFYFmmXqN!UJcUwa=b4r2Z3E9`& zLUZ*2K4Nz-_R1G9#Jw%-@wFDR^TkeQPZrmBlhPIqHqJVOogM3b|6EX0>!iTXaM8%U z+J=S~qRwxg4bhn`e-q$~xZ3w`5#rA8p3N`Yu$$fFMT1O~Ck>bZ_|J^{yDtaG5A>a7 zH$J}rUw9J1_+$dDyF+0S$@0fbwImCta*Pz9afis4e<0##yL7FwWSR{v5Ieo7)sU%N z1}k<5m%*XZE=)W2;_nS9louR!5HeM|z*o9ts#d^OPLKwSB$nf@Sn&^q=To6cxErJ4 zM+emyCfhYixf`jTmUUoPu8R+M63fACq1;m>E|AC+xfS_qOPk4^1xU2ll)N-vnzqM6gv3W{@IIx?vlW(VKJm=`Z-A=-$ z>Xx;Q#?ZIjQ9QM^c)KalQ7OME@7`Db(Q}6`-QGJt%@H473kRhC6R3v?$j20@tGp=V zw98b9Zk{E5(S5RLv*^^8OrM1*S?x}gSlg1+Ha(6|U6#D3RwdKprAO&RUXU)S-)+Ye z`jS-G*{A6m0E^EeWRa?X-}(4wR*wg4Eg$mjp_4hlgYd&iCFu<=+E}?Y(BPHJe_!m- zX)+Ib@S$yU^sfQfUqq4H-O#;g&EXB}h+l1ae65;$!pF84d`Cf-gS=*nzct}(O;#+DG-TqcsOUJjWXtxkxBjwGJqw!RU{ z!C=2)Eg)cmCp6*2u@~mzWv`)IucB|*MCz`p#jIn?m$>Rkwtt^6b;bBfCHM*@_;Mxq zGAU|U#_R~F7{M?jlxs#=3A&h&^Qf##)6Sjv2Zbnvwu;PK1iX;c%V5+^ytxVHUl;~J z+`u6j|85BOpLxT554&Vc?aW;)2$_5qya<1RPc*3lQfg zU;C=yOo`%;Qs?~Q^zFli+3vjZpD?ZUkjK7#Uy9P@>63h7i9a z*$@V@9;z%92)N(MVHT^o*{Adjr|^88lUeO!b@x;2^1Au;J!J8H+M%ZZSLu`{s!9&! zp@dTUT{ua$rSxFZxJ->iL%Jgmz*NmM!N&|V7Sdip3Nv6o57iVOD-GVBGJUh85imArcCdm?za(_hWC2 zu$gZGpj>4$*2HeZZpL*$Lx#v3G6}2|#j*^nwO22e#9XkOTI_-Cd=rjQQ1S&!RbkNNg zi1F4xO;bBcHr+La21vK+I3&b1@Q*^Cfv4>s*3jAYKuq9SWN}^~tv%Kse9ly*9AF07 zREtJOF2KNxY+WOWBIdN7=&DCqgsd9m$MBvIf-Z#QVHSc-2R~>!B6(h*EGWr;5$BOk zT1hzNfCn#Am)K7T!m$A9JZ6lNWqT$jZkZ4eb7Uug$2Wosop%%dB6Q+IH3kji$p^ED zS7!#+Do|lU1j!|eG+-(fVM#(}i-(f4ENBo+z|w*ZvT2N2`V+9ggO2AhDGyA6m<$g= z#)Ta35w0{OkR3L$ph1C(#Qakfl&F44pgfEWkzp~yqL66Le2&u(tKo!}KUxz`MHa5g z1#U<{!<07F17mHUvhas3r%Ot$D-&dO+kFa8VXI>HdH@tohmxZs+C=R6Iun$fi(Fd9`N z+@m~Y#ihnH+MZqo%Oru~#vB{}* zAWxv;;r@+%RuZ2;rS&yPb|RTM;m~U_roSDC*Wtn)h+EPIj>mXI9Z+6VJfaEO8Rwud zl(3XTZ3e31-w!}ZSeY_xgw%)$$00RvNpLn~D3oz%NZ9B~h<{>dl)i!n>C_mj}ek(dBSCd)#J{AK`ai zvd!;BBScZUewb~QcfL^wKP6k0;}wlC4%44%fm4kQ{@aw*{b!l)*jcZEIjhK z4-&jVQYTxr;F-i36tne5sLuFi8 zT0N!}Z!wI0_A?c0@tU0~2#Ial>6M(}{>GTW;bLU{I@pU|lLfPv{);Eg<9Rnb0ED2_ zt|Jz1BI?xrai4m=Q@WM18B2?EZE10l zFMhi;XRnf9Z|v^pZB+Q?e%)?-RTI+QIl`rkV%$l&3|^ziN>)claDV;fuo3S5Lw8{- z=E)_|--g8B(j>T~|1p>tXA(*~oAu_MPq%?bKU5$R7%`L>ViWz=< zYl-1?8{J*$BwjVBbEBu_|N98aE`UIKUQz5?(7Q}q?GrSewyeC>21?NACVh0G#oc;o zZ!%^d&YfSJ{Mdl+)DUR{nf z(&7e_ad413qqEb_;>Ldj7@8R|GwUG6z`O4Hb(4%y`|GxHzx3Bl?Y=nFlx_S%PxC_M z1D}PEw{Rk4Y6(A&AK2vcjeG!h{zg)h_>x+{->a5 z+eHve@{W<+Tq^}tX^YHxnKd{4TRO#CI;OT9@iM1pqlUHG_poX*J_3(t{A0rjlJl$~c(y@zs9P=q5Y^-Fg_yE1Xqc2BMvHWaet#Avw{Kiwksz z`x6UuZF5Na;e*co+L#%99j*4J>*`{J60xT%9j&87A(@NQzwSIVI-c0MG`*@T58IC?rolVryBqG=di%zKuc{NDV=qtj zhINOEQ|uHlZao)Z%$B#fRxXIdB+274O$v)pC{DqoxB?R72v*9)MB|G#EKb?97!Ks- zEc#~y^TCB-L($=AF`bq|a@WQdWpmD432HTB_g5}#LQ-ldOrqg!IVRW}Z9fW-8=`(k zdb{Jb<=-POJm*_aD*N&2i zvbH>xa|>MtR28QzN5J6RE$c<|tB+8X(MG7wUK+cqx)-(CGijqzb%N{YYHa0R_hvK0 zkan?ie~nCtZm$PFodUsWe(Ztr`#nrLuiPYW464iaz;0~)^B=euMxV4_G74FiqklJf zC$@{ow@pz{hMR5(;tEQ5b1^)&yvPX?@bAFjt?dfF@)5?rrHY;i#59u!7 zuEg-u_Y;;bnPqluLDX!RUep0?mSqP*@!KIz{6(XGXXyT@Wsae{mC|Hql>?O|L`?ng z)22s^;8Q05cR5Fvz&GFEtlPc|4rII)QLM+G;SM~wUWniYFsQMHJziWJFRi~{0nk_) zOc!)l^vo}1KZpMlt~9;q0@^&i)YBzsXH)7^%lEW({59L{^d1(x)V~Se0m>xa?ogAgMy-k_20oxK(_N81gcq!gP=GSy33<@ z9UmY#(yyUiztz4xJ= z(+eqoEy>M=a;~SC*^yD#6r;H-hiFGv`>gZ6ABB9~RLj7DrWpTG^`9=RvbJikspvO7 z;_d7aMF}%y$@s-0)G5ig8&NLFLv<9BnTTnEVLRLjAQwRn4!6_1DQ5P;ql$3Yd;6{A1e^ z-c2Q=_D6WOD(_X(>!%f*p3-eUGVJdR<NK?L6RTNJCo#b1<#*_K-VFpuZ$UsO0 z6xfJm2>efEo!AEjR02HxncTY>wBIt)4|49Zu=qbnaWoD>D27@GTMc z2OvWm-vROytB{*m7{$Td#G>G8iXqWxft7`JIz1oF3cw;@V@V>dhgwxI3|UU8(EywQ z5)^)65tVY1B0Y(kR}qOy(5kah9Z=9lK}H7?IuaR}FX_U<$YKeNA*>990WaH3iK#V? z7kA+As7Qc<0sbRxc1}cwCWZ_Pag4ZSo{&s^*20K7Ma_z(hXSm~4c9q*F`_thgcc#i zL8mP*w1k$8wJCuI0i7`AqEAaGrW##s8%H}j+JQ43Qa>sjs7AXkVV*Fmc7&rhXo*t2 zLR~R1d2^12rc#%g8R{vF5(~_G2o+waEE_Ah#LWtk>XHTfwmut6gz{1aMAWtvi^4Nx zOhO9Lx?=pBc;dncJ}^WV7(Q(;WKC>S+FY2SUkH!H9uHdIDjOY=^0xjVfzB+9Qtrtx zD*)pMS=ppm`d!tnTD7l0v8Vrf^PcJp)uay1^q}C1Mz{sK5Bgn?X;wTOhcIem>>ZRPso7}*ItVU^_G~unE=u%mJv+A1Hn>rO)&(_v`0irojG*Z^L+Rf`oDz7f z^K^zNl$}&M$1aRTqH4Ab8!bzR&yDS zV9HBp#NkJn;y!Rr+_sOF8`>F1%cQ4%8rGI4w6f0U3C6W3v9u#EQ4zNpt|}!|%jRG+ z^)a`Y2WDp%&2e?LzB$_IGH-^LE9e)zBhJ)`ri+#~Op?bcHq$&u=@Ew4j5)^HL&k9% z<&AiQ+r~VtY~W9W%RBPkvE!TTNw-u<_0u9VWocFE2*($Hc*YSQoUAoKcyqF7%RqN&P_jSCoI@5lC zI{?%jk7l9X+x4b8>QwJ$YSr$Sd!^WlK4}EXT=k~U-@kuzNBMoe-iP0Mzdmk#AH%$P zT2@D87H_2%8F4399Zh-3YlB{%hAVfz2TacoEB-_3GCI%O>N`AbSljwD)(XBtRM*nV z5lgVyr-%1v!80xcOW|3k2ZN)f`aN$%eoDTl>8N*f)Sa5j%kpmLI5;E{|frN4zwzgPmmkT1PuVRrvMXv^krrsqH@eT2L^~TIU%2v?)w~V7Toc z8Q5QbF6!O=;zs?;_)*Ot$edD*|=+PclQK$cMI+i+{xv;@7;HQo%7BZ zJ!-7}Q&rtnUA=0}Rdas9H@%8sIQKxI01}WpVtu@3lW9=K9#!ZSXA%Cu^3-M^Y7j5y z(WoYcR%C1uZinXy%^szIqpX*~`zn_vi_qMWELu5Qgoals!x3+bk#0L#WIs;w)sM87 zN+k0;2I46m2ef%7vZfk?MTbR%ssaOPvCV07SaP8e0A``SW)WUf#jgFYho5`5(|y>OBR7KT;kIi0B9!i7mFhbFdMS$Ssf$a&Nz zTYYF|V;esVtm$Vb777v0K zKH;i{>c{=Y71_+li1ZgxO-%H_p;ZQwZ}roDm{z-P*Z99K$UF#R>wF*U)WyaTR16f9 z!DG5YD!|eZaLgfECc*vs-~BjX=!QH+5r3T8bVsOPdwXNDPN9#%-UCj_W=OJN*%d#l zI(JJDq3AJLKvOk^54_yR4CAdgWpD2Jbqr)7;R@6JwaQgVt+uuBM{m@R*^mCxtW=y4 z3vB_d=F{@F^~1#5ck_-)XoF>MsSxSLh$?hNEUyV$XU{zItv?-7mQ#+I0H0Gyto)HG zP1gGZax^#McY&D_Q=MYe;x|#ogiL+2h#}Gf!$g7hI`dug>^l2vUJ#4eoq!}G>cdk( zY6OKI)OiHXJ0GPu7spq;BuX-yNJ&n2WjSF}t|h*JQZ}1NuTatjG)B!rSooP;TQLip z=ETT%#I;vdY&~VC-TYJ<9!Q%=d!5(-`shk9g(wM_X7Ryer83Hj-10R(#ipehEqI*? zwhEc3(a}&RaGiJF7vTvLRACX3y)~Cv_X2Dua9A_jT4}x!lGf4g*?XJy1CZR3GLM@+ z$j^V++^v1@Yp4D2z3NE)o{jS+s1i#_(w>5QS!`L4#Y_&Gf@fd-jn^^h2)=a7q`Qjc z7^GKW(rjGc(pqZ#rTjqX@B5K|kIh>p@yDzZ)|)qG=VK-F$K8iVntq2I@%B9> z2d;iG_xa#8&nONYgnM+xr}a98JgJv|x)H-WU%bRsB*{}Exucc**P}rHY({rH zBr}&Zm(moFr5S4*allE21mx}-?VGf1yI`sjnvc10LC~(YWtt$$<{@HiHD3dE ziP9*hU5+VPmu3|Q(JC)Wu!+HYUE=E>Uv8|TpX6WQHW{z=pb=X?? zo7V6OHY5iiV2SvlH}RQwRJ)?jluq^-`lP;f9RBhvNaqo6T%Vnw;Vx+E~O`b0NlU~AphC4mEhwEnVkWWjj7HJk*QfN7&d+34d6XGF@x7oy9 zO}f+>u|jtmcL(8KO~Sf4c)zp2T}BKsWQ!SPskEOV#-^n0blxd{w%_GKb08P4>gPpM zeBmuKqzDnO){2ha3ZL z`1N6ewS|Ft%Z|^SHQnYo(A? zdTiavEVjgnD0G-zfxVxHi+Q^4=nXovM2rsbZK9HW@ketik4)a@$kz`1XkJ*PDP51C z&2Jf}LH4XBIdH;WHmZsByxD1L0z9~4A3}O5M!)K{lU}U4Y$WS1S$m!2(|H{*buVOa z2o#nt0C-#@OXjBj86I=Z?gob~1aHs&_}nqp6j|N;@)#nuCAK4OSAW9mWOn|hr4HSl z^$4^V_%0QqF#_naG#Rp;{(TT_RMSNg&XvHLv|mq0wvl8CvLo6!Ul3R71JowiE{tU=;A&6K#75mU;M}U z4ti&9)f!zHKHC--MfyX!2SSwWv zq-<+YM&#CwozyUfE&a6HXpi&CmMTiMIZldY-Ie0^;ct}H<`~Vd@$a^=A1RW5c?c&LzuguuZFqsQM z#QcM9!_jN_mA_9u``H|U!aM=pJTO`QHQOgfh)C_4o2K;LU`piEB_=V!salcR>)Z{V zFm8v}6-5Nl+@O^Wbmn7lk0>v2%=ln8`LAQnmASkUT;rWr%{$+XI(PiK{Qc(2$recGMiu{VH_&B;^A`t>s1&d!E)T&fn9m?WT1kV-%Mn zzBK0qT9b(r0Qx&^RrAx2@6KntGBMe$G3}&ou4HO8%fc zB-I5_>dXwz4oD$yzpgaD&snyW4o9f8scWJ$@tiEQ=4Vi9*)3lF5Tk0oCuwM7$>MwYY$`kH zDKJedFkM^SzHt)t7v17T@>+9}dn@>q)&*^2Y-%GX|aM03J;pg_C88tZW(LE}@)D467o*2d`?z9YrgJ>#{ zH2v6BpFKfCmMX! z0g3l1DK#Xb3FFqaSf3u?t_W=$+P$n}hRk{r5U_~2s{VSi?A{cB$ldsdvlZ?>Gqe9PKF2()qlSxqAOEQ8FM$<18 z8H+#wtV-a|3bJo31Efz0|mXp$?05P2&UdfC3FPpOI=LSSp@M2(kfvamd?u6H>7v1`}3VaYA7#i7aum2vKsUr6LM^;VF^iKO`_s z4E4f}9GE&VPQsN!72139`qWjDx^IJK^SjJ#iGYRr7!)nz5OFu2h+`X{u`eOk4-x_O z<~$gzVcQ2dgXu~rI>TgDYO1Da%e+`t?Z?{rn9cC^ma4}4aq_=xM8QWHe#$*X>YRSD zTA`35OV}SsM;nNakPzRGfYl0Kt`9(_IMXwTMPpR=r=quUoljbmU=pD?)y_9}EtQl~ zu+bQ(D|ppxjd9sNEooe=kI^qi2Y;@2XTxd_!9pYXZp<<0x{t;XT}GN_T+u+G&GS@+ z)j(=aM@lTLp^4TWf>wz)(*TM4{criPDmic2XOV^?6Oa0ktgS@|Cd~ju0Q7UhLaq#H z;zDVy%Gi+aqdh1xvWOp0RNac|R-sBk4RJb7m>{%=BrSt|PBXQ9^UW{&XiR7hpGgo@ zRN#Z@F3iHL7Mt+sFJI~n`XG{)zGe_`(7c>3WMh{u zeWb7YFG@xw18`WHdCK~?hNejBfJXI?5*ZAWX_DbFz)1brxkQaCGi9?HyiqF8(motd zWloe{Nbri|2*rlE7Es355i_lrx3RKKo|kHYh~)HE+x!RJ3ivAJHSP)YW#!)*&5hrS z78k??ML@}+K!)bb9k_~y8ASEq>`)y{LN#|ft&Pm0N`0U!U{y=-tjea!bw%cuvC_N9H)bz5Fc-k$MZ{JG;vPe`$KiBIPMAg!tR{Qt?TBn zo_aIoTHvd3v{REpbQlUMWMf3LcmYuXQo#o!RuG{Wa^vwDqRGtMfkCDSh|r1DmA+lB zSgxssphoZGx>oRgGIoeq;IAvdxb~tq#`kXORcWbk%&_qIL4`Q~QJWxknNZ;4?QT9x z3v6=q;TfRCH>>HTQ-;&AfX!Z0Kr@dx#HD1Q4#C9U68y>0ZB5r4zoneYhza zW<2K!Cg?mvF|D^#x@b;>Kum6+(q9YHOH>s>RQufD-?naVG;d>>J_|?5$RDsx=Mc#p zcrB1n<_QW3t=AZwN2z3Zb@TK20;5$+ZBHl|ZEY-w=zp6V^o>h{)xuC@!>myy*Ml4G zvfB&9?4fMA43Bw?HnyoxKdo$+@M-qJ8*E=xwq5x=>`pSi*J;B{Zi-s$2Y6;+&xnGo%0x6 zgNP;mq{h9_+~q5QwsVc+(U!i7ZM;m3&g9Of8hUv#j{F{YecD@LM8}&?w%*X_#@CYW zmk)P5&8<*QZ6WBa!|!L6OB=>}ICdG~)ecVOKMz^8bHl5d?Et}qUTQKmDSM$FivhfS^>2KqIl*i6a zU-O&!9_3}8;=Ffdg#)fHh8r@Fb0W(>KdWku0u-d*DU7JCmErs_bl-sk zy#Ep8yMF*g|H7Gmfg$Yh8SQp=miV5tc1J&Zc}RD+i~9O7Y-n%7%ys7e5uL}&*ef+s zBjnC#?%jN0OO7X(pz7(R4QXe1rOozUD(_k|J2r`4h@4obP$ROm z5NVta4#Q~})kTaGiT{z7Pr+M_4@TGr|0;Agrh!{N+&3>1ra~R$u z7%E9|C$%>iNgZ*<6DzVFket;ILy=Q*dl&m!-5Y@5rGmh#>7xCEvV7vTGnlh}D;Mco z#VpDEBN9+tgZV^3k-OWzscZNR7^>P5M@La$1l&cN>X53^jzNST zcEiCa+tTlZEQ#|?o>)r0(@~I@ny~d+^!U2fWKJMi^boRwI>WaLEqi>#@>9gQQMlH1 zN%-bRsdJ4Ye=X8Wy;-9P^jk30{L_We}4NNJjG;_heN_AJYCALtb{2v#Ic*~*LFlS%0ITH+C&2(ypqD(9+~ zszS^>Ld2|HA5QhzT@M0Yhb0HYB`I$Iyq3A9T^y4P$)b{!VU%_U&_!a_Ls0D7UobTv zHDcO^pCf~*xQj2ulJY-rHQE6}JUecfVVgM3OhV%N?`3D<_QdgkW3HL=rRj=u+3kz* zKj->?a^TaL@2Lp^%dnh6=Ui}W0z__}eHZvlXie)Z^I@spkQm5r#|h83MoK+CADdY< z=*qk^UG{Fd^<-I_LP>R3&#S~^efYJQ0}lH1D8qVecYgLST-ypHyfan2!~L2cpW;7q z#Vox4%IE%1#D6|fx&IX~XXE1f_e|DBIzR38xe(qk-+xA7NJI(8i_LMBT#U!z@r_WzCwyaHa|I?$Ego8U5{894Lh=;;)@rgm@31Tb!HpcE*N9I zDlt4qGfkQ3q*uy?b|sc6qD}QMM;Xtsc5tTm{uifF4yU@zub+SR04&P-)UVFShXDfH zso#UJfGX)^XzXv*+0VNU2NT%vhEqQE9iPUy-jq)k*nxR>lD zkg%lCP^L|JBP8L@gOivx{KAB8FRE}&@@-kpJg!>2qhPd%d5k;n)a9Q~SnDV#F zJkd$z0tnG+!c>S5-4#3(8>u-MyK+fiFhV^DNa3*nJk;MQWBXt{i$UT@+Fv?ZG>g7U zvDl5#RU^-+SKcX+stBk`5peTRD5u--%z?FMhCzxI00##3ZERUd+X{#}?*cfiOVUwZ zf-KJ1&-G57gE28QrE3ih{631^W3#t%@o|rr$Hi=7n!ogPb$0#zvtBwp{#xrVV7TS` z{F=Aj`*wG7eS5Z?vtC5chQ6-O*6D0V|DgPsz3D(*(e@7K=%7ASK)WTRn1q^DFOce7596(-CMRanUZGnWuAXzYb|<8QM_&@Bw4mNZ)|JSO}@>q)=}A~ z93^&;1u;_FN@8rL?ThF&{%G3!=#FEy z&m}6k&UgR}?^a2&!JAjdoob~(x8uxdmj{;|0fVE86@I8Hzu}MBGo-SH27iw`PlL07 zHN(U%9a$n@!{v^=1K-i_ng(ZnoSk`-YHMafh;77NuDg4Y?(9r@+{V|A2vkJjtL`gp zsOUAR>K?(H#B}bZhC_=>OFkCMkHn3yM9gb;ZU83ZtYNLstCO?d;6Bl5xWsnZci|0x zUoQ)((s54LPu9Bxr}|uWx86_sCev&)WdQvoKAA&iJ!RnbDt>`OW;SS& zWIp4wI2xogG=59VJmQFZY5ty#btti?|A(X3!&m0|0hLeN)(yC>NdTBx-q;nyrdASP z*ZHm7mk~hzJsY;?chMei$Za22nNQc8{H>M#kB3(4EcC;zsIcZMt*XWq&RPAh1(Bx@ zph)+CV1imWY~3mZO@k~=Z<%Wg(lg`LM6v^b1R;Zw+I~B?IoayeFSJYH^YZ;9MHheG zVSgbgqaBB!puTlo*zJz3~XoEXbh5`M+fEyjm)(6-g|EZs#O&LF=A?poSZ0}0&A zoo2y-M&x=$vvnP1G)2|Kn2(?EM|lernFDU0Q>!$St1JcjM9}?>zVAyREltF~T4etd zxd1k{&tS&?P045D;`#r;Y6H5HHTs`{4e9gMhBHcrnTv{#YMLmsb7_*k`kGoY3U~wi zU3~3yiiXTswSCyf5V+8CGI!EEE^D3=Hly@-CSuin*`8 zMtY>JVm_!76mL+}fYhv2NwCW*2AC4dF!ZYoi;vNIIB44`REp1?*bRKV<_9gQQU(^w ztY-PHD^N#eH0hth`Pa9>Oqz`f$-kaz%cD@1rxOA>Q97O> z3ia;;A)8G4<%KJ&P~fZ*QK z)R(a$q^iw$^w}yNA`SiGvFT!)iGrers9s_DHba+%HxqKFm5z|R5FRvoBN2-^)CDC$ z4^~j78_DFT-bvYx(xo$kk_0ZsW7nupH(-Js(eHr)ehZSi5B%E1@HMb6BoPB#4XdKv zFi>;y{wsSue}!<83071zV{N8(f&;ZggZ!R&S7cOc7SRFKY%A zg|xhcZ~VE5g*TSfsy=ppiq*8N+~EU*XTCx*6fYjyJ3+rwg98V3i=gyJ(g$0Bbvk zM!GLMnac8~77GG8ZNcOgy3{82;mgdxdaZC$QH|+GF{=)GG`ecV7bwvQXi`P(@}NG- zUz{Y4k&trcj&L?2Fpx|M+AhLn%p~c$K{Pf9`eds%u=-?!B~W-)T&KKYlp5`EEJ_W} z(e?RnUAmRkaO^`?PG{g|55m+mlFk@^3-GGFglXaj&0N5HF>z?1nsr=ZM|d$xp&+fp zPn%ez`x&udtlKnjGmCbj+G!EBk_+|DM0V(8(CI?fuv6rc0A#G&G^V$RB7s%D!K}Os zO(iT|fFusHW0v^BDU=uT{p9niq1?s?cDw@QI(fU`*nJ1xt>>scfyq;1P=T$|1ku9NdaVJF=}X zAm)sl`w_X)s+{_pd*E?K7JYt)>2b8D=z6;vy&hfZ(A(4P;q`cPf8WvP7hl}V53!A+L^Sr25uV#r7;76Lo*De;mxW|;Ha3TnJrhHzV$r=U7gs+@A2hu zaPfl6UC2$y`nbKYmwGbS&-eB~013e>%3;iTUlgxB{#ag$`2FSQJu{J!fssI$-&3XB zeaDgH1iIms{KrvmoRG4ZQwizQ(m95Ii&$P;@7w)qp3v*gUf$Nn-Z=5w`*Wke!0Y5^ z&h)m{txJh#&e<<|O_v%qoW{?Cv6D(YPrHj3Io^NXp2ydEdqe8#C6zN-fcl8wX?nER@PPcb^`o+zaRrAx) z#aU!XHBNXs@K19LH92gS%d-zX_^r@VOsZIvn9n?LHqlxL!QiEeT))g$@=vR{Dpuxu zK$Lge+-``Hq?s#sb=~8QI@<>FKlOs_Qlz*4Y zC|$h9(~=slvX(X-q;Qc8)7+xf5=!_nw~U%{7={@~N`zo$S&Mgwa?567M6tjg&W#5k zq0?M+^zrpSL*8n0n3P+Yr#w zc-O*+Rrw3;%#^&)sK&y4EZs6p1!#v!ki#3)Iwyd+BfMrx8X08WsgAyW9@5`8V_U@5 z+`fMD=16MmA!TcW0g&r22vzmx>^n0%vfA?j)XbG)rE8>n1ZKFvtBpmFLkBySaq{w6 z>EyWbR;p9!60(d|RzX23xD*L;Sfa015|6ZD`1zUBTYQ;T@n}@)3zt3rwaTG4+;Z8X$q#m)PMb8J{AqVVAu~CE|7S&!iH* zCjXBGkGzoc?Lwcjg}w}f*e#7t>SO{f($&x!tV5DpIx`o6ex6B@C5@4DFTUSwP`Gb& z6j*@<3Wp?8_(a~f$wLmWn-RGW+pfo3t&U&GuZC3+Lsh``X2Kq*Q8BCvz&ntXAkPGI zr2bkGc9Pe@55+Vv1^0~^xHG*DB_IqYd;!Yq5hSI&otmw_hvhWLPvE(pM)=ul@8InI zbbR3WzRxqz6tmK9<3Hf^b@!NZ&nL8i!8`C0bO>s8rA~RL?PGQC(>tb~ps)A|>{M*Y zw@K5%f|*!{Ur1dmB}ej-3tpH@k79@A2>(V$b`$B4xJpjE=3 zrt9gFz#m~_w>ZC2QJVOfboLG$Y6;Pj7%l9E0SKu5mBLfN2T&K z&GxPciU*SgS2<&?wLr7^~@N#Ck z-W0pzc6BGe&(+;ZvUnsio98ag=N)s-)>bBLSDw!RJ#^v|8yOl3b$dA$`#qkQ`Te?j z+}JwS3Q0u-v~ne8U(9U#-Ie;cX5lmceeS%vaIiP?FR|_{7Ngg+D;b_EUix-))6K<2 zlx@xYxxVLOj}oX{DXAR_ug6{(HnTM& z7%PqEpT7{&KKLOuH44RDSP^w*@VB6Hhq}vsH+hU0zPEVrlrF@w`hEVm)0!#JPUqnd z*%*7i06SEJdGt#QL`t+lAp747Gn>h!uCu31Q_R!huO-gG(%>+2<&y~h@N`Ke&>Jxf zBLBnRjCow#4xz|(y2}NF@7v9D8+E6w1HoL5Wwr|4pxX~0bF_rc)Ctm?^lTB!*Wg$g z<~0HCa7xEsi@|S}blM&lHB1WSCa7Q5uCy#YE-Au!YLVKEa(2*_H2w)%#D{;S`&a(- zejXW8Hvq|M~6+)A!cpwoUbZ)9r>-w&0TK@fLG*gzMj;<~+qQpnR~6r7BMa zlup(N!f~RbDvqbmNQM}JO(FS`#bhiDnIubtt5Be<%TW$3x@`4>s{hNgKL&g1(&}~%WLC{>nfc9j@QguA6>*sC(9R$$3VXp+G0@;pBJcDO<#n#Soe9#R0;Y&K zr#D?O0Bn95#l$eb$n(QbAm7kqS z(iqinC+0%U@=t@n(qkRKiJwR!(IjWhqOoc=Lx-xSWKo&HONb0QJb_o4X_G*=rI{6_ z=|QA4*D^)TQb;Ypib0GYqlqds!K%kVC&iGrB8ytlPv)h^Vvts~5{J%)tS$hPlSxkX zVG}W>CqQAwu3;(>Hq^mWlkNFhAJ^ofA&$EG7B5FaV^JiYIrB~uUA*gua+5E5NV5Y? z7R^7RRbY`MGo&W*O%*mIGm9L7OsEw~rYN$p5)MxfEkGAdfZ>Isy^w+1zT*b=$*jYk zCak2NB_k85-{#gv6N6p=g{gc{fL31>ZgNpKfaB$hN=>Rt{_0X9G77sQ^bd|HO|MfN zoj8#QQ(dzxk%}5hcGw-XQHLxMleGrcn9Q{aKU7<*B;U)u62Ssg(FMjZBH8 zF+J9+ZZjI#PNHVDIQyht<3HxmtR)Kj1C&gS(FLKVcRK8Yq6_$^p|QIk0&*=j*3QGLhQF`dT$fswE}B-f?N(Bndy zLUC`irvog1@ffTY6r#6}7BmEAX<^XUv_iUqM$S#O@zbCPL-iBiMyaS%VkK0@40~*Q zM05;fbyewX=ONA*ahlIO^CW)YoCM6eR*tQ|1!d7Zdkj)GDnzK7O=HSO=~efdsBTzn z;wJ6#s?h92*geN4zS0h#?p1FF#Vz|~Rn6wlC^USOH~hwfvq_LliOo^Qp2CJ`zHW9hI|%tZ-!4xJ;*)f#wZzUD92n&&Tb%1&^eo-ZM~Es} zqU7a@GGwK`?s1bbkgG~fI7gU6hKH%ARipT!8qThPHi`J{<1RguG>t+i0S8bA5V|uD zzJGQ*LP5Oy`cdCc6{T?IVBwaSQtl$ges-x1ajWo%mKrclR>Mz=){D;Q`o~Gfj^j zGn&t6;i~+YjinJP@RMDo#ZE8J%kEqwz)bN%x@n^4bMKG>iQRm}}m3SS|sil`pj)cZY{y7XpK`ujifZ9e%>r?5KDY8dB@! zg%=CHsq-M%@j$d6?^B>-^087`@rNRV>Mbqrz7&oc(ZdW4>RRha^Bu z)s{Cxv_lf>Ps5L}VL}9H%szN1x`Hv-Pz0=ACMp0<*>IWv)(9NjqbVa zx)u^mH0Sx^zjS^3^D1g7G{nG{}WWq??;f|8@JD29H{-uG1cTgOVhZC8GoAhasHQIM*9rRPz2Omi0 zXiXt=l|rqwGw&Rqo)BWO7Wc&U-3OI9TC%x1OwKx#untr)M%nV`SyxEo_`lpBXuJ&- zsplrIUJNQhC5V_+-~u>Ew=b|!D16)I!9(M`*0?2w@ZQ+rm?bSIeTp=9O;nj#G+Ry~ z#C%{5_2>p|oQ(|Xv>Wf!I%Bh{^~^SH1;Rm?@B0Um#>T4cNSPgf_*quA72>YBV{qSF z6Fe-_5liuV=FfXp74eAcOP;TXf;&eP9;Av`7BlK41ot$}xJztiXWUBrdSckLhB_sL?LxFoh}&=OiN{B%%xqW`4MDaN8RPckL0k(FH>%%lBau!RuSHnFG#iK==MDX8a(&8 z&GbSEYNa@riNiLw*C$0l%j9}7abkxWBiCMLawU85-N4@;%9xL7VJ^op@WTgRLG+mN z}{FiYlt-AcV7uI=Ruik-;M5n&)jkj&VYdiz<44ch|Xw1Xr0~^hUH%v#U*&;f) zY1J!41tA|+rtlxE&Ub07cgrZ)>OwxPEXAk28TD}WLLSqUoB%m$Vmb^`AktrVPO z628fZCvfp-VxVZKbFtzb1?l!@-L@F^1r%KO{emjTCdn{SCTSoo{h1(PA~HFGPrV2c zD5`x+qD-+whCMNkZ_=i4QJX)FAV{2BLHFi=)v6g31^r-}G% z`v%o;t^UnIxlV%<8fw`Q2Sc?VRXKvDK7b7Bo+MvdhPLnI8!c1?YE?Bh3JEPG4#T zKiZ0FMP3ji%p^`|q?~W#w^^Oy5u*5HG8pu3HDug^TMkkJ2p1gz7UQ{)2H_Nq5uS{; zV>Zh^^=#BGDUc!Q%D|G+Pb#m>5ajqs8c03OPsSBJtWp%R)*oId!V0iL2<_SeW_|i- zbO&U4Ric(O>Lym91=TEHoYZj;6SORkg~-Z@`i7!m>SPvhP%wIGKc%M^XMkPF_aU&u za&leDDC?)oF#S_Yw&eL%2v4AHPFzpuiFMG>E97g#6p74ZxtX!Tc*_Sv+-9n zZbi$!&Q6AYA|+1;`)_>W{a=}tG_k2G^NgyMn7C?*4ebQm_5S|Zm!Tfj8{)0|0KA-`J>La^NIRM~3&-UD^9Pa(=To z8FvLs(lih17BF2FJ=cwJGRs%$o4GV;&+ zL^Lm@rC^ocp9d|vPKrYCB94c>1qUM-2M{d-^bPAiYL*B=*rx#zlxJYv2Xo(3Md z6`95H&sj1XZPjue-aS0rzkGZo)H_rSHn3UT&mSI6=~s=nPCHx@E#33k)_$@m2;;}F z5~@MxUKg0>U%<)L)Pn9OFZg1-qLm#GPWj?qr%Zb~=Or@ZjH@Oirmxxk?6j9pnPZ-I#m>t#?y<7VWp}S^ zk$OLY1ZwmS@Zr`JjV)}R@*LTZte3iT3z@;g6y)}qtjwBhCD?F{F(_263N)r(sF_rN zZW>cHsUq7thvI$S(^e`OkaC%wkR2>CP4apT7OpJ)s&5P*{OX}x_3%!NUuHeyuI^($ z?kk=AyFKf*3x-G6fT=m#1|C&tpyMAiy<96x`Rn9382wDv#Ye0pIJvA7YkA%F>8p(+ z_e-gS^#NvwZ-;zT4%3~?$Hivke7$9prcA|6~4ZrI3v8%PLPL=z(SqyKTPI6cdCu$!K^=!qUl)abdaP&4?%5??E8Skr!YRkEtNVUQ-T=$93t zb!t~i({?0h%8pW6q%@3EmaFT-=}9&=Zw zWD_*Tjx%|*1P+EOFPKnanOaq6uDq-1~PPwzAw$2m7wb?x|^btfDNos)bw3OJb>14lw@N}3F z1nLyw94ei#8Vp!G1L}X}#Pb0kn)w>erQp?TFBZ?FVcMpriibM(80ut$?Ax5zlt zXzB3gxYf`(L{XgQm6Krbyj4-Hs^H`V+dl~aS;aOMD6Z8sQ8S2F7}T{2s1U$%XOB^+;N3C7T|+6gBEB@~PJqv3PAPzc`ZA&N>ua(oV5uls z$vqIS)Dd;Sa5%!g<2XQ|(Fv{Bih}EUp^;3U(PEK$-x%EroazzdUSp=gGb zm4`w$Wx9&~MsCQaK!N3eklY_h3=k$AF~k4DmwT?YA~IV^lM5M)qSO>7U8RR+)y4oP zEpL$(uimqWGK#Eun~o46J&Dp*qzRGQRBkrJQU!${(938Ir?1LW{)rAA0uEHFCfCOb z6LsrSVA7hb=;J7DXQ@Imt!XnuzpBUt{#GB)JPV;|HSvU2(p9mcaFqG%*ExHk8hBch z&3Mp;{iOb|ELV$iFbkd*z8>Lgk=1Xs2RqYMAPp~;{;%2dAUSTEYqYkIq=tk)WKUwg z!eCCE%inWC&m<@!TE1u#P;qkPYnbDRW;);UVqNc-;D=(6ILJhgvgz6Uz6yA2{@DPx z!X#{*^gB4U;g8%O6Zu***6MjcexrP9*`!mIUdOXw|Yg2CGOybwje)tMEitxvGh< z;F#!KnlCptNva69bXSqZ(8L(KWsWTRVe8X!jfgmox&;5$WYckE)U!d+pE`x83OyE6 zYmb=Vlx$tM=xEp;GGTKxjpBrEo3*LgO+(?@j*k#&#Z3sT)F*XH^wp!swnR>toTh10 zfFn=|nHY0=B4=BAe}7c+dnh`^I@w%xa}2yYOBya?g9N)7eI6a0-xloUZGSqftW3Jq zVm9>uINiCe6#C@#Tb4|)TXO^?#nVv*9(Q8AaPwdSXk7We<>c^x7|q6JuGZMTsqXCqW2O_1 zK*%;NvV?llg2a@;fXk4f*Fo;mMlRy4=hVSywGQUB>UkN@55sfQGNF~7eNsy}^?iSD zao*CMCKi0OP}m9I{)u$3``Q3$2_lN>DrsiJN9?(!0BqW|`K@Km;73(uJU76dBQtnk zLz+OiQ#UJ!Jykz&z^%S~6^|GxLz5IJe-aNwaNy9b{`B zgI=fSx(aR(W~Ttf zK|l!(o@}9^Yg5U^9vDVN?zs|;Bh|_|z0xoUbtNJH` zqfhZJLL>yH>O%hYkx)*jAA{tCzJEqf4pvW?nfzalcW-u9R}Y>CPeNa|z7;LOZM%p4 zeeIRHiu|!3#}0|SsK~wcOm%hbC9%n2H6TW{XDg8+40-!V%i^SJ#WK`t2fDw0*IP5n1s^(bftVe!@EK;pt z7u#lCtVjj`vGXtmk4arBB=i$l8A46oAa(~&C2-8MS-G@pF-{XgwJ`?EGFJpE=0NYy z_Z}4bL~j?ZvT7a9;Q5 zj(gbs^<%gb)dA7$^G3?;)nbU^6I1)N3crb2+YQq)d;e7Q@|#;)TbQ5V%*^g`rlGHx zn{#WfF0*;{1^!Cm+ts%zu8-aqQ7>E-E`$+oC;Z&<_pG^9@ZF6&Zdc6{-0wRQ?*ant za;O{g#N@{#1SD<=Ru4qn3Pr?T4~L4dM|YM$XI^I%9P?T~5z*YkhTtpOEWCv+n!9Hs;f6!^R2K9r!XBJKo7{+O03;#x9xSF5HI?;BuVz*G< zD%!i_NPTMz(bw21xaNBNW>b4ESO4WQb~T~yBuQ6LRAw*o&4aSrWtDSlEY>oqcS8%$ zgRLi_D$!y0wN>QWhW)w~VNa5J*1Emk(ZlJx%WLpj?yjyt*}DioCn^!epy~Qf{l$5& z+x&;EJ72!IhkyHuJL}rdxKvIlhl)*9S;fluz1caegnrWT&wxc!Q|O1|NXOUDW5WPj zA8v|TQIM3J9vk6T9bXT=dI!<1)wZ&|P&>ld=+oQyv3NI3qwc(s>l$>bU%<4f;4AIn zExX6MCSPrfi4C8oroqQL^E5Riq;qqTMWUqM#>lM_LkGyy<16V~KKxZz7cv_hS}rd% zSN?^XK#+^Np##5<%gfF*v0&TV@t)Mt>0`^@A_~=;-|%?shqTq|%!5-QF>ajW@j9`e z_s2=z$6Fru->1pP2WGC9S;y6;?)k`1D71Jum+)z%+2?3HHV($w546(s!52;o)n9J2{@sNs6VYG@Ab|HvKQsKJ;zdWIV&4l*>w=;;QMo4g7 zUm(5b0WnEt=Jdt0_0pRvJfHdorCCxQ6ck`9SqOP z7rN8sD-8jF?)iEef3{A)Ml46eZOyI`FcdGL3;vTWTE9%D{McknmJ(Y6_m4NyLsc7E zlvg@4C`(W}XP^F0=2U3%cr~G00JV=R-7dzh0pW14Kj$aGg zMCByIKzeHcURo9IzZm<*AlbTQ+wR@AZQHhO+qP}nwtKg2_ug&Wwr#%t&Wn3~z4Pvg zs>(T|Dk^K%inU_q${abyi`Iy#Yyd}lMKGccIel%yD9BGxm7f5ZHYcrSa3fh}NCyxT z#RHP*&e9wnwM7N&5nl}d6F(~ufNw!nA%b5;nZiFrDJcI+Inreb9~sPEz^}lEK_@h# zAcZzZeh7hNu6RS{Ll9Ky{uNUsi0_`DL7=aiTnyjbcF-+>A8#sOO$!o5=AFC)PBK`M zzKH)sO9FHRkf@A4A<3}@1yLLl(kMkzc?QkgP$rb5OmhLPu{ zs?8W1!N045AHjz#l_g$iSVdJ>lIZ^F>s?(}0xWkhDyBu5Bp3BT$nZlDC#*;FAIda~ zh83K6qMaeGM7iPlN%LfiKNiLcq6Jt)mTFidHVi4R&WOv`LCzx5S?t}?GeVdN*U@+$4T2^jhFZ2kBU+a*L|I~m zP)k;@L)i||e<+n+oWUYK1~`+2v@8boS|WvC6WH9sIqR2zGHxq_K2G`1t#+7om-!?w z7}97=OQApph+ZM3KPQmQPh|}{w~D%WS9M+*({>TGf6kr*y*3u_K80CZVrbpI)p>9l zzQy~;P#X-kMqn-;-gp-^lYqZTflIg`F(c1#ZUgs-k=a7PV7B#lC|7ESPlzsyM%}V* zu+C#{+H2s@7VI{pHU@`UjZzitMv{i|SHgG45)5p!u&A&xW6h|T5S|f;&NDRyV6El? zv6UK6m&|4siQ~?2oI5?Fu;yQSSUcAr!z_0M4TMTrPh;6GzDQcPRTHpv?6zdOUw238 z@d^Ev_nE%j^C)eO%Pr^3!{@_6Tz0 zwDV4SKBa@DFG5wih-L)COcPj_|IxthLpHa)wzm2mL%C6o$vL>sQ;xMLx*%)d7xm}4 z_ooj8X9b91QDAh&OuuM>b0;gHM_3lu%m*JaRAHs`owzQrtSb>`=FLy?`vuEq$rq)77o% zI?wLR9ZO_LRWrV^#eB&SAv1IGj$)t)z5A-U7aB@lpPJNcD{zOp&m?sJp4VWW@b zN)>^mm0XLqpe$W7%l7{z;U2$K1(Nb zVXoj5R2bgabr&66_(ZG-jfgDZtvc5}FF!=zBM@8KBD2aBs`@9AIoEEiELy!)N48gA zD$EgYYdJrcshEP+xR|Qr*h5iun92JKS($r6gE`^D(C<_}XcT#4uFNe+V00zUQDo@e zTfCp)1N3Y#=~Nx|ioPcx_QX5t^bUIak86*b)lqX-MpTf*v}Sy;s9m-z8A;O6s-}5r zGKUZr4s#llfJN9GG?>($^!WCLL|&1#SZ11M@-8Y-GqD)!w}xD*59O824CX>y?$%(jxv6dI3g%p% zDIm6;1R5+nFR&bGCIrzywajG*DfF>_4b|y#UF(_BTZ5XBqR4`0R{vz{yrLf%s0~e} z{!~zL8py23o#KlgK`;{T&Mljao?SP#Vppxu7#LiIxZszA?0f%IiydBubJN(br)*W6 zI%t_#NBD9cj4;JM9(cDuua2vwEz8yR_`D)L$Nou!^^1xo)6?l`6AGH;*q3RJ?FuKN zvyJ`KTUM4`eE1u8<#X5n7mV-ya9ZWC#@<6|K_J9!?(2RV?3$J1R+?j`B0|Ef^8Pu_ z*ZuY)Z`$|$7Vk4IbHKY)7{*!yq0m6a2qbAPBf#tB^>|ym+xa<{@B8g6%Wli%OY1rT zW{T(Y?(neL%X{(b?e_4olIlI{Ij;#%=9?Gv8I5jUwv0+}0>TJ!Gn)wR2VP6Z*WJ?* zpO&4H!utn#eaE$rP;@~rRdkNt&|n8kmi~9xd+6oNm`h)g){0SQbzL#tyb-d?AW^uV!Go7Q6d6b} zyob)|U7b;16o5|-tA&T3g?{6=^9a*A{AZLk+rv&VjpJ>cM`GRO^9jiNsNt1eAv9x2 z+dMBjIh#MUvff*;B*#o3Hd@KrQ>rI+-yJ>QpM1GrFHx0YKT^%xwU??V(z~ep9fTrA z6Gof%PHE4q&s49)pORNlAWz3_0;ID!++klCQh4hpyD$36eJi+58IM= zK2?C7aE)yKqiS}E>_ITGrjv9RY*8eJ!aSQo~jw>&X zezhFC4g}?yS`U(JO%s%w46GpRV;f@hV*o~tYpxvc@Lajbv%StfHzC^Yh)!M5F%RVB z{*9d*Vsa@yCaK<3c*x@Ge%VtMfaCjQLhZVZp{eV6zxk@gb)&IB zqMg?)EjT3KboeGV0CwLH9&Nji$2VI;xo)xYqQYtJ$%G`B3Q1jFF^;HyV`-@yLQQMv zE^W59%R^~j=0nUZKfO(WPqnP^+hru<|Ncqwke%zbSu>qG54^EHxqMooML1W?fB%5y z_Qe6Y|5E_`-{?a86cPWOOJ-o_;Q0R+5q|_{?X(wB5ntBwAs2hA`UpwNIzyT_=(l!=fLAxk?dG9l{cS4K)0%ubk-mXMm`6CY|~ z6$M?P5AS$6gIy_Oc0d8`Ha0Ce`U3(1vEk5Vdh%sU%q44|*Uj(OXDRQFARC6B2^dQGMhvhFFsU06Ac#SnT5&AiV&y4(t@l6Y4LL87AM68Nujcsoc}YyWT9n4O;3Zh!Gv1IKP8_xXG6uzsm>B9 z>UOZYKO2g&8q7ML{(Gt0)=}TywM21cot@+LD)=4p=-c@y`2A-?`E|(%mu0(SzHQ{=}Zjm^#)22r(QQVl@2{huV zG+_X>spi#+G+_j_t>)DMYLj3pJ&BvXvMHlQA%c<htKA%~(a$q6R0fmPVx`z1 zDReQTbL5j?(4(%KzSjkQUzW>%M+N9S6XDn`e=JYKFLOH~8(oKV|C1n31DiRIgf(xp zMV6Uhy}aM`Jt}0C(K_%rG{#)GMeFZ!xP&RAf)P~8^-RW+oYu7Sb@vl3!HhOPw!Bh}wgoP% zO6NM9@x5v|&X}e5>a^#t=chcj!K;`f-{-A8{hQB4zt7X-UcO1Qx68jOIm2OQu05B& z(r)T3xhyV1x}5Xen{R_Da;V?)+}&?Jx7WK#!nKU22j%rE}2UdV?7B|2lPw;ArI zyAdu8j3sQ)aBE+t(GF`!I%{q@7zD& z6s|`1jc(Vyk3*ZCYkOk0r}}5}?xN{E7WeRAqj(*Z_9u}o|%v=_CZapzXFNJ$Q!p)RSPH5p zW2wIxb1pxp`kR$Tu)vH{ zD|@NiyHpyxV{S8<-pwdkUSDu}#m-u_dk>#{Off}BUsDXJ9}f-PVOpUuM5m=LvqC`= zemw4j<=ilZj46rWppFoI87eGAx!+8>cFt<}`c$JE`K&;_aEV(u*Q@Jd7#%1^lq#Z@ z`-e!5L?`0SGUhCyBk);T$I^GIyxm+dr*z)HiI- zHX|d;zjInlOicd^4!%iCE;>gAWmq((7zPS0v#vwx3-~Da{d-A}JQcX9D`QGpa{@VZ zu1C=(gS7-l3z2~pC?I)-6md3&3ki|Umf4_OA+3R_<1YxU4!UAc49+yqap&*a%a8Y- zcjH@jkI$=Xx2spLZMQ4oN*eNN!mn*gBPI!54SHe_lO!Sv%HvnPq`T0Ps=(6YY*m6e zCs<|Y1mYsZI%Acwf!*w}0Fv5#c~k~+{)~ZeLug`BkfHi?6m@*bS_Nt9z+Y%c5uyQZ z)S4i(NY!qTiA1b%)~f&!0vOe=>*0pR3=}}I4vmbVtMV#FjF5f zxx!(D*NpBazwDUswGM1RjitIK{jDQfG2&_NSrw4xn!^2Y?Tu&5lUb~X%@r11Mibt%KwRfGL{gq%>W=D(CHK4~Z zwzU4l*KIaJ3|<992mF~0TC(S@2Ok4z!C0Fg6vrAHNu}oVx6TkE_c{!4%LW?4jCXMq zW=M!*63svCCiv~v#5R-P#g;1^WC%&DdAN#}pL2)sqBRf$42tQ1w7eM@p0`v#JJm98;p>n_Lcp{`ZI3j}_HwYlQbaK7~81yha3y*$0A!#B1 zTYUN?I|`!)qP-RY*jiTqAW2nZc=kg8p`)N78S8CDut*c4LD#^( zY0nhscbI#8m(&5tcPE$atffF2X>JSYkN=CpYW)e)r)44$aR02l;U{$~;_`ax7+QzN< zE|7Z@8DL$pam0Q&7j!qi~sBgzT@Zo!OT z{M02Z4fAz``s$5J^vC>8V`#?7M3?A%vsBnlClb*1tW>Jt(7wL7Y!Qxxy2kxt+R?r<mJC^Cr9i6C(qv+sW@n_E&m&gci;lsf9LeNj7#=djdgwat?SelB ziG{CNj6;bQZ5)85pD=8$ki4b71et@8_f9j`wnz%A(U=OTBu)d;Wdn39_JKM5%3KrD zHE0pkWO|y2u9S{X&t2%?7|O2c!+SR-B9E?X^!7f4O$ixO$(`vHBnz8WUdCo5znQ^; zVhB1FKe;>wqe|dJciJjp*?^6d1DS&!_O9^Fn5s&MTuIyDSa`K@vkuX~73)t^2%B(2 z0ZmuJ-R#PrtTNz&^~i~*)(|$XApzamRo*h1u>gnoaLl5kt_cHD*c7?*W<%!9jI>0EO*ae77rEv}2QTmIT&p=$1E zxk+pH*`V&WW5Fy4HZ57wBg|g`7aqM(>g4n~>gE1EnLDQImh*2%sN+%u-mFsRQ3Os8 z-4D!2+z-t88M6e35ag}Yl@?)w{$y6zCVOI(=!%xdC|DXLub~?`iBQ)&n86k5EM!Br zKhqZfX%y80!1=fuJB0}_)qBlt=zr-qn=6zUySlMPEVAfN}6k-Gm{!m3DTT3XCN_ZM~yC`CBaJwQ& z3tLNLRr%OP4I;is#Ilac05mkX0rL7h4IIWWI7qbG+J7vmcYiIS`Sy#@E?H)1#-`4~ z2^dg?pdyWH(2sgB9ZDd*=aRy1cF->jG+Lf^&-xUJrEX#Asq0XY?2RNOMi=q*`km(} zsnuk^n?I~H<6&dE9o4$HkP~F_!3YpQ9i@U#BkpPta!Un`wKB13t6yay zwQI4llcl27_-dXVx%IHW-CAv@f8TuA>3#iq0acyO(&mH9)BMtRe)#C}ef+v@Z1nSc zt=e+Av?DWv^wfzD9a+NYlyVYrHMdciqz^G5ElJ4KIt_4UsHNUBQrP*1IVyI)ns^0usn&z&q zHHjwDVKevE@*CQ+5|}V!Xq&8&OsNr@x01-CIrgdn(d~v2HG9cDfL}y6Gpiyl$hF$%doN-!$$aHL6&Wd3IaaclfT_QN6 zB9$8mY2Riymsa+6pmD=n2Fygm%LQrFZF;JX4!UcmpL8Zzl4pvQW9CBC!XN#)GDjJ% z%J+n|{^G+g0U1K8xB9n&s*(UBpz5X?Jew}IvFqZ^4y=(0G~+oa#%+*{v%sv2C)Nij zcPhU*`+@MQxIBQ7_risTWF0(MDH_27HlWaU$jjO@rcY2m_?cP2o2X+^m zpc*|0r}o85%@p3pOL1LUL0v~-Q!D&NmiSf75o;LZ7Enelpp5E(i6#F3$J+w% zu``y|4lEaSioFMHP~1{wuG@7rZ=#JYz}QUOQ!&S z{5+hr^y-VXFDZyZlFZ5&@TRUMR?lklaaI~qWe?4I#$easiMrt)^YU59MzutKf(l9QP+tO*SAmk*`;L^G&uOH&JX?9MVl@gl0`5!fBkH z@Hr0%N-$_(K-?EK+z@}0nX2s2-tcJ38l7S42n#tI-<6%t!5Xm{ZaY1{$#X-#mMO{ z+6d9+eISC8p^Ea}^y!Mi*2RV}5Hka)h)2bQ5hJ9I;w2SwETPK%!Wr^Wky`K3nGu1a zpwyTV{R4=O6_!;?@r^QdtQo$lZj>MpDLN(yS&=lL4$47Gity-2jp0>*)`)$oG6V5& zfEIy65h}>crc6u31FTRPY{Yf-*!W^NQVKs<*5qIO3=ClWTA;rWR)sZc1tFzL_?!7h zLCiq~0!0@uATfg?u<1o{sLq3D@r5yzX4&mw5&fFS@e8Y)r2zn)@3e)9Sx5=^sXI3I zlEq6!2~}MZK_(4B6M58KZ1Hapx5^6h5!O@$jHoFM$rWNAld0?LB3Y0na8a_tCodGq zF(!URiQ}LvLW5A2rxWKi!isAMD>efcjF_N+REu^}nm3cz1?M*z4gtp`VjwYFN{9$F z9wZ(jB`ml|Y+@?V98eQho+AckR&>zjE?5r{-&*Q@(MpzRc#{waie$-?BCK9GmVvlX ziwi6l5An}b(6&Z{H(OA;aW!Y?)GL**stfE__2HYVmd-fQqvn8&Y|r)AkdtMZ>ixEM zogEV!tT8A+g|rA~RpqAmS$zmK>L_kZrghcFQqblU(c%y!=IWm(W5T&gL6R66mI1y< zQ#H#3!$p3HGeySE#13ch3jH~PvIftei9G~hR=up2Br86ZpokP)FlJf0j)UZj(C`>Y z#Zjzq2Id-ofR$zleu|v&DFudHwly_K?C4NK_!tTPeQGaN9Wn}8H9TS z$bg}dmA*7!z5SBAp^puC8o%N2?H`^j#mwHa6>(}#g_XZY=;w+X|z_^ z^6Db2WXxREmxO8+MFXeY0a+m zF50G@TW>Yurh4{HbJ|yxv<pa0_GXbe1aOtBbEc7p);{knJJtx?O(AZ3ej<#JmGu!mL_3A4gWuWotIyis~#B zZ=agAmajf;CQqB!<9a`@#)o@7?cZA6wiIl*Zbs4zvUC@^@B0x<#KC9`dMSj_!x!X0 z)0BOl$A`B!z3h)4M)#NhV&U+>J$w{KtZ#34y&!@~;<>VS!j!iQ)858QI#aYK>-o!;*C*q<7mjAIUDCk#hI*hu$&yBKm| zQFg^d++L8~yqt-v{dCuoY0fFdtw343oN3IfAlN#eTCZR4Z`&?VTa;h3ATLkxR=Mhv z71F5QQE6{vD-ft&sB|>5V=U4v_}7?bTcRyM`F%0&m%GsU-SPe&_l>NlP~X`>dK z-^(@GZIa$r+t&q4%zD{g2m0p=@!<2e_sjhYG1Vr@hQ-Zkc40OCUzX-}mgh$^sft=`V2+SvzwI3%f43yX z+xb2&7R?XuZoWVF^7uTQc!taEVdVI}z5Ts$ok_MTN(Fx^(H`f5Ns-$IC)jv>yX^+s zJ!sySoNVb!Wu#$u|Q_)X@lAnz_9A4 z167abW1BB@(exb(SfD6RSuj_OFTFM7cZbzMLI#M&&`$@%B3WI-Vi$9l!PsZ>73@Tn z+;llz`}ll^rS15m748olC8k*fGGz-*>UL1R%^$`%=0@maXwswgcp~i8huJHKsb&Zj zn+&iv9o;c{AQm4e>OKYjx|Po!QMuAt>GKdl36w`m15vTcr;$w=M*Q7gEUD`k(M9Tm z(4b~Lgwve3Cd!c#p}CtNc65CBdk~EP7ls(7x?Jp_TcilEjh)Ybo@XYOcv9<7n=Fx81l`if8tj&EWWQjbfOVKYewhHQTp%+@ zSPySIw%-D5twU(-1Y1_-M)!cw_8Ag11vcYGwt&A=|3 zF5+2dhhYPen$oH!x3tcr*17?=v94_-I$MuC1m?HWG+>s@JMkh9?&5XL4y&fTak_z^ zU8ZBCS4~a&GuE&sKZAiD^ z#$dQWl&+$iIGLta@QD7dsf0sZJ7j>~(fOVFjWON@r6E+{qk2MMj*>W}-l&Ncq$IPjgN0>^S4&WE$?< zvt~3)?}KDy=tGeAWF_nR^Ue5W9d^jUHnXX8NJ=224P7~Ue33!65=^wq+OV({X=WV) zeflINXYHPIcCRJJf1Rus4e^p4!6>-hVlfIn4iqu;UuUu~wx&{c;Fc`E9hv@JxBL2c z#t%^t88haf74ya5N&oh0D_LJZ=14Y{IFdhW_5%_t*N z1X9`%*^(%eSI?2@zWCqCc?0nU32Wfmbz(VASv+kexQ{9BX;^VHl?Rsvg8hDJakjSB1ln{1%UXeyp8+xj-R70$sOWp(%yCdA25`W*R@Sk{qIF%- z8z>qj5wHQ0N596bAeA}sB0rVo3|fX=6Hd5K*+8(}i6?4Ij1!7Dxu);?=a2&zlg;9B3`ohNU?neyV0_)2Z>pv5j>snshf)U79 zc9(p-+*=*@7q_!ZU!!z#xY^z}Cnvuv)uJ{9E*aQaAJRhw#k6OZ&qw*bzg~t@4mzLx z_+vcYY9n$tyT48^Zz+0TmD}~Jcz4#2Xu&&~=V_-Q$lr2va>BVGSwb3*+-z$YT&G}6 z4MNVgJSALdrZ=3XHxw?+4=_0gAeU|J;0tEES8C|L+%LP!GTJSkA!`%0e?*KYKA0sk z=rA%d)@R$sOcowLIC8_IJF8w$hR$=rP4i4qr!s9IO|q#X9P%?pnMb+R z5V!YDQ%NO6+0+pAw)&~pEE0Wdj2SOAgfmH3wOmshNxtlE&-wVgTLQ|L-7hBjda9l_ z(<(n@)8%sRXOV3(wmidH$$r?J{7v2^=%7=S^mOKwTPog&5@uo) z{{D(0B=^$*-`IV#@?L*!)XtVZOMk6z9of=;MAmjBUCiOSH9$XJ^HF4W)J()SXaRC` zk-@WrUAl~$&CTKMe0=h7Ky&X(kXV{a#;fgGt<-QHx9}Kg-%Xh9jLap8^C%|QQuOsv zZY95*Un8Is)B)=9BZ#@c@-dgc+2wM%6|?Wf=IX}#aXV zP#ooGW+CwYC-D-bJt+;+$|NAiE11q`R=@T`|a^%CoZVA=VMA&ajwLqS}(P$ ztLoV`@6%;@%g66{ENVQYAtexxArvC|X@TPsz?J}^@JV#HAcTAPdPPYw?!z$dqJ%E@ zs!J=1iu$oK{>CsZ_p9amc+2&(Yjkeol+Dp&t7mqJIpY}bM}WG3{#ETiZ5RIy)jcC4 z)4!|bjQ?x)X5jzIOQovU1(1zYq`^{``c+magddEEBlxizQQ@xw%j{YGLLY7z9?__a zP**n;K=p{SZZMgyya5G|h>>wwJk2!XcDp+5Nx1n_(cbzaF?Ci^`<{IkRbIT)^;g-^ znL#a~K`KC)l2+vtT6+i|vExZCX+%K2oD&~IZ3T6t4H28o@Gtx-5`xwQGjO`Pu)^O9!&!|wzj|}y_}P4LOh!yg z;rLnc&%?ff%mFaNCe1-~kTh>pW>-oOm7)PdgwBCV6c^NiaTEoA2yIDbcVbY27a@G*07!vaRk(+$cZ1r?}h)kfgv!f{@y3CebC)bKGv zW|o_+L-eBXfS-z?XqwU!A!%CUvK&(sNtC)aEuzZ~ys-@TO*E*yh%vK{$4zu7v3bBO zc~nTBxw3+=Xl017bj?dX5MxxL0(>MD!5M&kNSdy&>?e5w@YHf*gP<}kcn0YWqx~c} zFd0&szxvK-D&Zhd!YqLCUBWE=+3z2JNRiQ^Q6Qp~3L6G;?3tYYQj=s3VPxaHQC!)q z(6mE}#tKG5=L6f}AhICh_*eE4{7VoHK7y&*VZpGG2e9@-LQM0*qC(B%{QjI#6XwJm zqoLU54nSf+l;K=7JGjo&a8Ml^F)Y8%)N>7_87EVz>d(|iSuxfjNh&u}Ycq_k-)lz5 z^(h6wDH${8;F^F1C>Zr=ce7L2o7^p5g|r?ZEn7L~?!cZhyGRMWWCYZUs*xDf!qc%u zn#Z*TDNa`A$YuRkiA^SXj}Z5=krJ>eG+KyD2!a0qx&-SEIdV(9BCwa15q7^ph}hAlAs9A8(Y-g(pTG-+y)$W~ezeR8ovoPqX_XO9jgQ6njvHc7-#FF})?Ml1}PNt8ubzn1C3^pF3E_EPnl$Z=q#LN&e& zQFpJTOJt*UV<7~*m0z8`E5AvL2EtAYYz7R&)B;Q-%n#%QCj|eFKqD9`=$K-rx?Gj- z2Hqg5IVDx@l!ivBTrz8GUNCQ*4Sp}!R}KZ!+(7V`0eOg0LzNIslNa|bZFw9Ykhx(5 z;@n;}DS!#Nm8S!f7DyN?ULyW=p-4AQZPb`D<;Xg;{@0{E{m?KqO2d@U=yaK^HQhk| zAW5s&W`K6@GD(Zfjn}J-tKH}8V0HMI&$I1)zw`QTpw`d(>*8WJXY>Bv>d*#O$OhD& zWAZaDWIb*g7l-lgZn5$@*Z2M5-R=8+H*He)Mhvs-w(;DM4Eu5g&CbU`OL~w<#-lzl zHf|xzklarQfpS|rct>0*Q4%oDb;M5!dNv_6TRlV4h9K0iM000^(ChWA_PgsnuCw=T z=O?w&+4BA-=l6Pd7$wL1{c*dk=l$5q_ifnv{ycrn)Bd^?Rg3#!_1rwg`vgh(8ooMA zZzN)7r>qD(>qZlgm(AndVrB5~am{wg2N*~c zz}#p*6lsjAu0zn1z|bmpmF@Fj?-tUsSjd|}CwYB6b){Ee%tfuvSX5FcNC&q;wSPF7 zvB}Z>D|l(lKH~1(EBW;TnM)4Pwi+8ygb!*Ata0H~pr`?dSvE*C%@f8D9cXesf3-wc zXFWnfzyK3j`-~;f1bU$?&9kM&4I>KK^R+4LRb-4Os6bm0x0dT;>-RHX=dbm%peo*x zAL9(6#vX2zB6wcBxM~|?$%nk7KBUMU>~4f-NGFXcr8d?W-fs8FoLUJyAATvL35GMS zQfM(V1;jk$z6eXO7>m1@TT7`vI6%bM6q>@g7yv!_$)E3Qo2SYd+{PB4v(AjWjxf$_ z$S1hK9csRA&k|XQhI}joIiFiFoXr>%x)I-Z&w6=B1 zd4p8(mgvpcR~KwfQF|HQV&%a+n#v2DH0Qn8qV`_eb&-x$iE6k^X*6Fb6z&C-(Xj;o z*_=8+{lg*a0?i;xgbD_wLM_#W!z>qMC?;(b-r@w@fRw7B7)^@faA(1jA7v53m{_pT zJS54p@Q(wHPE;6zA^NCrs2m!H?O5~SZS&y+cL(WE3%|f5w4=>Rgt76ON5H=3Sl~%? z^G}lDFxel>gg|^;k}~PUO+oy$nzy7C4BEA2x`T*jcoIWZj>bOvGzk@tmjK*TAnrvo z_kq1IN2yE2P=b-}r9{GzB1_3Xzq@+M6+@##IUmlmtB5PqgtNs-5>K0}^4Y|<^8&2l z#Zm%Dm^`I-{?aU~cYad>K_uYmU;Vu7>07-lrleYowbJ2Vy}!)qQ(ehsAc1v~)DPY5 zRHr=SDo*vsTOqh*YNbU)Oq~rrgGd%#vj;6OoSo>ihMMuIf%M0}(sFiBN(^ znVRTBZHCe&QYdvRkiJ+J`Pj0OhON%=5w3}u?L|S1^{#%rzzw{ysbG@}3XnZ+V>3Z? zBf*jT_^zOb<-g;cc3~kND^r;CPw7xY*T|t-tN>P-T5niknymgU3F=;;GgA-dAwjhm zdI<)r@|bPB-_=?8hw>Km)6|wH+sd7U$>*#?=*G_7n9DNJH1YIM89H<^E>K2L#FK(| zNJ?P?1S2j=2GEJxeshDIpcYzX-N~ZcjVPDp$d{Z5J+34EQl#!KUZ7PdK*q!LR$~CG z0oI$j0WQaT`YO&j?C^b+&bA+UE)Q!4aO0WOp%Wtkn~ze${6OuiQ_tRg6i5}GBn`*u z)jrKAt!!s)zGl2Fd!DOzg6(esC9U(WFh=uZVerp2!pC8pLxCuz2=6r-!{RfU*!nWC z4?i5`XKy9>CabL+h(Y^KuD!2}rE9*CI~U5jVT@=#**TWI+6}~yt^?Kvph<6p`t-4} zVhfOOiyGbr@6}lBF4f$uG~EAOV9i$j=!Q8W(mhtQ@P#h^^ukGVO=$g(Vh#VePE1T1 zC#3BUZrNJ8np)4rt9se5coC!S433&25oo(>K+#kK3bH{7ShCeNy!+kj^$;c{v-NTE zT+=(QRXOrcTI!|gT`KC9aj#a&MUv({=it5}-zX>E}$oi=U zThFVTd(7Hl(%K<-^-U*saQbrok5D)ptahXNUOi5|EKzC=%aHYGI?bTP#nZb)+UTL| ziG_dKfoV{Z7bMc!TUNBh@OyJO2}3K9W~vqx;3XNVIbT)Z@)lCuk(Z{K9wpGLt|x7A z{e{#c{N5J-6AVR+$#w@1YxoMBfd{q51ufwbcfhCKPdI*kE`0Z&!twu36ovWU%2P}X zZ2y}miWXnAt{8$Gp@{wU$`^RDS06JB6 zwYDO0NJxD6fiNJ6WKbEuyu6aUl7{j^I3Wm3L1F$41K0i529(?LX19)1vHj3AS8qnn z>*PgOtJ~`F4%fWNo8L*I5rOLxNUEY4K|?avaRA9lmsn~YRH#bPso(?kDy`;HOidI; z;{imv3sDBZIAXyst*G)KYQ?LW2vFyxhZ*rgb=gp1W2RBpB~XvE5iKG)o`{ApWX^M( zEXk&v9g*Ts;8pl`Q=-e-aATT?X5pnoeB*{xn%YTY80uOQIT~YE#v};j4QWz%5gL~% za9SFtr4dbhhEdH6>`ygedSX*uDFuhEdriow`w^>tH(KE*K*3|fcTxTZ&_F3aPpX=v<*i@)iss!>*_zPAgq=YNcQ_bmO2iuZyyp}=#6OtxJj&5$CVmV6><|P0SItdqPCuZ~kdpnG zP!rx#CO@DhNb@5mNaL%4#w*R*hxUmea>(x>E{0wNn&aji+9*aB0(nH@fF!zI$e;<0 zP%BCd_ODN-;-Cr~>@?>RVSzb|!8>S4(V=rhT@0k!ykuYW>G5 z9e#{HJMjWT*)zTRsFF0as-bXCqd4iCHu4$da)4xD*+4*HMG)^Q5j_2P6$`PL}_-4q45w22IfeJ#xN1DIj3zYa!?`0|gBbsZd`Bf!}{6-vQ2b7o* zbS^MW3G;$n#Z9-NWmfU2;rxa1Q8Nt0x>6ZKkWxJSOYu6E zZ+G0N7(n9@a8Sk>7i;Juq@Ai2SQH6MrcZb_^;ECIS{IB^611)fpJH0Em_{ZtQkCE9>j8Gf^BewhtaW&RE`|Gi7)$+Iy+MVH7g;+ zR*^cH2Gx!28my?mSVxJ2| z8deHj1;aQ!9PbY1oX(YnlNBjDjm@MgxwF_YEvIOzZRd(c_SWXk=3Xz)?@OAi+3c*X zecsPL#N_xU*A`IAaO87J)C*{g5UWpJd^Re*zA}QOfAE*C0@twKp!E){` z))o;gFc2$xKK%+T2#roB2d^q;a%2~H4euC@j!wQIXtYWtui3s)71|pR+pRSvc4nXv zi^8li?oL1^TlP|5@=8Suehk}6W^R2qAGI`NqM7t`(?VWqUfQr)0y7wtCEXa&x>|yA zM;B&-ImwrCDAy|=8;mC#K-9HQX6Ge;pDfrYVT$QT5#!Z-J`7~I zgbyNA&k%Ibf?4QNstgIz@=3liOz3HBI9H&7k|U){QlO*^v5eWe^Zzh*&cTsH@xI?A z8{4*R+qUgwV%xU0v8|15+uUGdCmT$Rm-}A5TlN09@7|i&hpic#>X<2R=YL5}0CR6nvt`|wE2}{?HNooYAi66RatO#2R8JqcoV`oh ze_JkE(ss1n)$sSTFHyoip5vWvv~jfB>venkf3B{gdUzPTY%6~Ldmpnj?7UkqzxjG! zyYcOQ9K4@WOjq?;4foxPI&zu9%%fAPL$0DF>V-J$U|0s!j)7-7LR$X$2J^V4I!^wm zFAi;sY3lLT5~FG+r}&`t>6opY{+!K#Rj?n{-q~q?-IVaK_kS5}nZm5Mv-OzLJjQiE z0{}d3*Q;gUk{*t0J$C+lW_T574M@;VGuc=xaorlgZd}-&x^X<5?UeZZDw;adHD{9j zA;@*hveo`?__+Js+~4nDbL09^GK0YDW&lW7^ZEFgzw3W`Tnl_U(G~RdJ^3d09PJ8n zIX&Lwzdwxh+3k!)b2`*+ja|1}c(mS3f4)rBV+iha8nRgVkyezjEEh=8v^e)@*w0VG zZ;phx-xf?DX1#wecxHcIA-vAu1#d={C6Re}aP$rMBn<7i=>MFf>+9#LL_WEm-3&SD z>vi6pRE5jH-3uoPv}k+0px_-lk;Q##0%H5U^AC8`=P=5KSE8@?ZN1CJO<>8h84e-$hQGUBw9$n-$=;@|JvpX_fPD(* zW#Hfiu6|Tgma2BFzW!A>s+tUbD6kic+N^o7Mlk8-JW0W&q0}IRsuz6RkI5d3OhfGH z@cT&MrS!aGjr+|axJiSynrMz9Xt%BXr^8?S=Z8VqD?ZH3ZvtBcN+#ADVQVoxsPpE&Q_f=v0r2P@v)uMkqu&6jdfxt7>Ceh-h$Xz^Ndk=Ul zD4d|)399u-k&({jBt;JNcBAVs)d7woEzu8?%k(Zv`<7(9*r@$<4>+vrDBW5!PUDSD zO9gWX8_V}uX6|cI+NBpX7dE zKkLHRc+9Jsl~NZ&UH+H7OpkhK*dm*sW*B0IA%jt&>;0fT*FV?s4IZG@x&*LxfxxAi z1#P4^MSG-dZKmd6or)lEtJQNA?6;|Eleyq6C@Q)@95e;8P6&)sJL13Bf2&A;8B`5k zmsahR4m>l|=DSle72hD9>SQK`e=5PU`wF!*X=K<3d`q#rEA8=2h1Q@vt$l1}g?cxd zT6h_EF?!49p+Z?hvYBk$ zqS{{w_l}PnUYacDYQC(7p>0Dg70gsaNUXvz6bgFPE@D~@l8e+wwFHlchrPkulRm!BMi45k;l}ggYk4)Lq1WF<(!oePoPjXp28gf}Yg`N5Wx{^puD1bj zHI?4>1>2>7q|E-vUfK2I4GKj4!PXfLY>Qe3c*=Fz1jF`!|Ni6$I9@IadW#s5a-f3B z!NZ&^v&V8*WL%uO_jR2a@1-($TgCjJ@|VNpbov|A8`OTz`X1L;!^i&h#OUw#IeA>n zJI0+OO6z1-jQFfw?P5-3Q85n%{!t1tY>^L>6xNf7GZ5O-0TWhf3T$Hb<}6!aP@Ag| zH}qXdm}7EyT+mkn_a=-pz`jYl_1=j3F5_v>zWi!ftX6b7q$$97rOGUU4ktNShHcmI3)fnp*VgOnv*B3vP*yDH5Cn-Aw^(Sz zjk@D60O$@7iWYd{`*j#j{nYf>vew0X3_P+(QI`Qd>mYHfUU>7HHrGQ{%oio0(82NH<~1MXbVDH!MIxlIC1OVY>LDc` z1c|6tkPypzRc4T4lFP|!c_=N$E5d~k7ApXG34Arp;q-0_p)JYXDv67g|8o*I*}hOO zE6tZgSF~p}qAIs~pw)UZwDC5|$G47@=TS&`~bq8E>>5ExCSU z>R#I?y`F(|Q{cKzKjY_>T@I;RuE%>E-PPRdM||pl?@xpdg2ah~to6Gm`~}sErfgC3 zt&bONse$fG+XtsdUDbw9JUkzJ8CDrPHd|aiukRO{_w>ZsE;f_JDIq9T&_c1{%sO!k zR1!7|{;UMdHkT&G&WA1|9@T><(SCKEb7oJOm$O&jFZ6s%r#ddp9NO8m-kM@PyqC?% z(+VCENe{gZ>Lk0Ku{r)}mpNMY9aA>w1*S0oxyYYQ(~HHO?b6PX!AdsF?5B0Xzr$j+VKr6*-&^%YcI&OuG!?|SyfOpaFX=%XIFX>)@ciE5C zaisZlJ2B#aL?vmXBJ)gant7U9V+Tw!ozD=E?ER{c6>V4iZ%P#D4&r4!>NMdYuCfVJOgVxg`3F|1La*33>J6010M#n1i*&u zlh*pTRX?wLGmR~M{n~B8jbQJ)iGV?(}w<@mol}Lk`>l1^x)|cjj#xhXI+xj{u3mcF4CnOTQKzSf&6dPK>7>dMBycdRvviolUKvlNZvc_XMmp9vEd7PvAwz#s? zv*vKs5@1v7_sFwmWlwf6J+K>{85nFV;+;yDvRHWd3+`c>l^$It=*+0djGGnVYYoPN zT{@XN#--L|M>>@aHjAu3GE%u&4oX}RpU5SyC_y6eu|JfBif1;|ovR<3q6Uphh9YNB zoNFYM5}rx!Igr*lT$%xCa3Hz8u;Dkw^@0|Y0gUVN=pP1C}$h~I|7QVPWZPdl+FX^CGId$B^h4M0Lk-umOqH>@3s%)eSlwvcdGm_aBJ#-R$L-czJpUF#sQoI%jD%qj*__Q8W zs($K1OCp;vMsi-r2a+QfK@px=v+y7tlr^Rj1YH5X$$)^c7UqFlDzv5;oy~#*GHtLb znWWz2Y0?Uj&oDYNCswL3Zm1xOP_R0YZZpW;4=ri`z*7)bW(G1_#_{;PF_UsM{x)TV z2flO?yHl?kaf$hRB=ZNsWr#%jGQvudx}k22YRMY?b^~-Lu#GYjd!j!?)ItJDY-WSH{aKQu@1W1Z=OlOIGa0@aG8AoNO;exo>pjAI3(B!iI=WWg%`V5wD>+!{RL z*;naE=h^2uOkPG_!*n678`Das*jGV;@DRhEiVjT^X&r1tE;cY~h++AQ@ggxQ8piOB zmcGYw*Xmw#x=B& zBq@m~O5;qGKp-$-;-6sR@$m2Tu+*hz;d=1}7FHIK?$O`zriaOGcW^PRV`O4yq;&gI zw_scnypD@(yP(j={`yjgJk;Uf_x`1tjDU1us*%&xrvdKON)g>~H%VV|k> zd8xkU*ZYTq;C(~}BEQe$-9=1*VCzLjhK0wSon)_*=iE`qwujHjE9qFqlybG9oL@qRb2l%FJy`fzvH+{+33T z+b!9zQ(y06hZDv)!t+=+LIOco;K2!@&N{O{6~bjgs+kO`kL+m_%P%`Xr*JNB@lMo9 z)qGTmO50CV_fNJ=JDqHNer=voR*v3H!p!Fd&!=^msy6v$R6!LK7wV{v)L}guZw7S! z{OBE|{s@J9epVz$-%lsc+!frizw5Vey&hz^=AOU`w_a{<{2rw;rhVs-E0l`SHZ>Pc zYiRnG@e1+Vbe+1VlP3e5V!aYESriinl}6^Zcb#}<&V#^m8A2a*OW_#VE~nP|Uw;2C z_s^Pot}D5J3HtJ1ThxeT_*~lAMU)l5QO`uA_KM2f6PLauwi2ZZ6Wk=qNK;siL+jb` z1M|CS>lo-~9n@4#TsKtUa}y8F4hE;MXJc{=4cqaHAC9%kb#y(><2eKTop6sHSbI2k zwLcV}wlO~=9{@$T8^|iwh#ayTA!v5VjWZAsaPp%fTg5lXQkRX#;QD{=)Z9g+Vh`!p z3fj8EO*E&9WRezrHDw#Whc)tE$pY%_W?R$HtDp)?DO#_=8!1H3!kiqvxrrj=qu0pf zPNOTWsp|LjJtio2dHQla1AHwgM$a44W;5Qp=F!2A4nDkLBQ_~?9D|DJz;3I0Q_ZGI zci;mO`>fmwsc-XME+(|q%yp|oB)QkbV7X=5Tw$=4LQQOgmf8EuK5nI9LgE@*Vo^%v zEsDeUIG8t#G`v#x(G#~fX{56>eU1zF;?u2b?T00nMmr#BDKf@N z*WGDKn_XDYDbw~9qVNXl9mev*isv3q#thH=AMPLpd-+;Aea-jMHS_X6`FPEjLntsyb7=f}AB4Nq z^b2ddoMhC)@_GVx4|_L4axY7iZRJVFdN@DE7gV)Z92%gfG|QfscRUN3ZXqzBXzdJjJXTc5)k(L-V3QSMFk)A1T13gI z8?-1fE{08VwQ5jf+$R4~n0uxuXiymc3N=Ovm&U5hB~#&*E^$wmx*{`14VTB#uuz!q zHo${coko?HcDl@FW#!F(y}aeM@Obp-0WO^L<~FoIl1d7m#n$pRaDekP3*HE`Y1}*R z=l~kdqfU;W^0tsoIT*Z*#}F0wi^>VP-*J2Wj+QnU<>Qa_BQ!qA4Ie+Z2{W%oc@6FW z8HoS9%@L7!iH zhvoMd_ZS#YeR;g9E$~!^&nnx~p6Am!2@xsPF|hX|_mSbtGg^0S z+Bs&*HXxSlJqtI#a&PvljWX%7&S`eb6zaSGWqj7Eu9ZCsgdeHArANPr6MPla&2Nr> zBKW!;(xWe^w*gAPr7c!T#x`;sGimz1!DtyXGk?PTVUto`yGd@YF&?)H%7X6~G4HoV zy;cnVZGb1vC3J_Vse2BbICSK#-HV(n!sM3|GhTQRqY>vkp|_oaXL}Lv&dH(cv)k>5 zy;F>4gSb?8C*GNj8}@hO7L=WD7mrJ6YZA>=KY{}3Cw?t=pjBp*tDLAf=aFTW@L3^( z*8kHTKY>sla%i2l6JBv%V)KL9LSj#?@1Zowt{g>xL>&Z`MwUyKQbMN%IcV!Xan4^wiA^UVy{4%pjM&ratQLq>SZ);MymZzY?8?W>DGs!`8R8{Jsf*V z4*OkYZOARo$?tuol%CW?>8TQilWinUa5+^8d9tGyqfW+)f7@@$b(d~Qvw+1P| zBfKLUnN8lW@M#5eXncF!^tQ1u1DZ7{p0((>A%cmHS1Qpf1w)vcrv-k z`meMG|1*vf^M5`xvT$<#HyouJ-6?y6He`s-N73J1?&JpHhfGkQTy=j6I@S}zO2Sls z%G5N=tMmRgClbc=3uK6{X}s=w=s5S!;VuE3_TlC2;(EDGXF70c&h9BwqK@APK;x$(i_t?>4lm z*m~|!g=?=iu!o7U@E+8lgAbhAqSzzMuUx2tRW#MGOE2* zIE1jB;?-EhHAJs83!LGHl_pAQ6hD|qPJ|}&B4!;gLit;T1*D!wQFjXl)6w97Y{oOM z1;gPDauhOkQVqOsP&WtDLH2;mkke9&ST#~lmjBlZr7e^^4upz350l|R1?48@mr`GZ zM2!SrPk~Mn3r>inqU}$NhmYxv{FSIKtwnlRV-qw=!}+6DOBr7PJUAIjoHh?}9aj66 zPmTF7xKTXO+U+^28;8b>RHBY7B(*(!Gh8Z-EXK%VpSa4Y-aZId%9K|KfgCzmNN9?z zi>RPMoui=PP$#gXf-4QSxkv_-N(ZAAAn!_cE(X~c$>ZqopuBD}!%E2;FV#%cp++h& zC?P_TNQ0@6z)U?sK>?&V99H{D4?<6i`w+t&(>oqAZs7XE#cZ`)h*sNOSvEp{J#k%w zKjAznQAdPjoaB|nGFg!XWKnf~MpOZY26IOiEe(!B+zmEbDw+<^5?vAo50Dncb|W)y z0fUjAl+I7ru@r-pQq)WRsiW+$8f;uT7<$ff0;I0lV=p>4u!gQC`xP>|@>>~Y+9~LV z3rvx>{9etq1pS0IwvsGMb?*vk%t`fCMuB)$gF2>&y1NRZ&Ft@`q90#F=q8ZsDIuw} zph%jenv2-q%G5LAXhtaM5#`3xRRo1b&JxJ+3R@x7IaINtaB$+FQSmU4S}Awb;65$t zkWd|!noyR3#}R34vEZQ8QQ->m5m{`q1*)ASMN9a)memj+t z4;h2Fvf3fG42PKcF~BpP-*4UqlYtkC6-#6gJw+&rM`02($@Q*7028U>xgcB!K#DJ%9gaYOXq}Y9bjz{Rqh~%3H z3r8IvI<##9@wI&La{DA+(Qd33E>`Et;FLW=M(h6hVZ(Duf4 zQ>^;y7&TF|R71Nd`l?F(S}O~q%a&51)XM3t){#qIw%+n+)oc5*G$*ml9IkYqa%7nn#D5!+GUX=fz$fjlEnJ}RWM$2(O#{fvkJ#jFnjOQK zA1{23c(t{Dygza8KF;&8cGgASm~Z1dU>~;nR2-8ciZ?QyRzHtxcp8Kz(H8+PZ@;3Q zI<;WyY`uc?F7f41=qtBPB61R+R|R!(H`@O zwZFr&gCOd}a7tn)K^CH#U?a~mJEAYA>jd1d5T675=E4kV7&E$LPPHu`J<#7m&XB~B z>Ntqdhd0YXL#%;`&@9xayI0&o-jC>nyV>2{qeyu*%2X-u6mH@tz8cj$m-W)hcDMV) zHmt0V482WzwIB8yIQ>&eUHZ+w#zvN(!QEZtzeTfm|K1@@^NR=D`ZI)2983?_34v$_ z;oH3yW@EM@uTGkh(@K>q-PJn_jk#c&yTJALo|>nQW~1!Gwr{?#t=GHP{qu-y!%V|9 zENgMz`&3YY8_Cb{o3$*Tzm6UP9w$#3%Rx&~T|SPVf2$#%1P2m!KNUDOVL<1!ypf*! zIP-fn!NGlshyWDMTN5xJ7lL2UFI|TIwV9ij-kKB zqhC8X1O2IyWNs?jG?8$7-cJ8G80v5TdYjAZ>GlSm^P2|zUd1tGFxb*F$iAn2FSiZc zgt()&h@_NxdB1xFt`wDgRDB{foaItwv`HZo0^h(Jo&0(5>X8PWJ-K=CA7f(Y8CgWA z_2JhlozSR^ua}t&*h58FNpZ91&&4u%MdI7wT?&9rwHmN8c_5{?RmLdGxYir`lXw-o za5CZPdL$ReLRPE*mQ-B8FEG0kZRZ#J--@wiW-bYr1Xmxefvnf=uMyoToBYogEXwuqTB8^#1tRwvqnB6&n z!7Dd%tjE`u-EsY5~0}PdV&%7wX^khIhApzo2%|7V@F7B8=i)BN=Psrl|*#P zsp{%;bcZ0R;_XAm-UTUanQVTJ2E-75J=PEY^oNG`{eCroRr ztXddH%)w*i*GJ4`8|#1Q2B*_A&kQ^gFdNv-*XhoYiW>JB7cC$38kQ;b$rZBAx+R^k z7rVZ}eScM(4skaeazTIoZ58U}*=c>QXw`>#6C{}X!B|6{dg<^GQj z^#5mqyXJd>Tb&art@FCGOJ+&GE1LfR`wtYcaD|%A&js0^wM8)CcK}&cp+qSnfkMK0 zx3AK!Pt~)n+m;Tt3E4~6lpK%U9B$UU+x4drB(lJeiZAS8T%><_@Z$fJ;mCzx!dZ-3 z9g4wVHWDNHkI6`Wb226cmac;%u`w!>t2AT_V0J+{J!TL&HB2QUQVv zG*Mr8;Mg$3|4oXa5219}qmU10dxf^<0D+~a&iSzThd0f^8@6HFR0W-Fr_pjc!%?jh zJEF0If}yJ}`;Fsn|KPn$vL5IWZhsbS4zT1f3A=XayZ1c8ca@rlv5 zsfYQg0H($Sz?d^}tOX;RLQ{oJTFlIq9u^8@h5>9diOK9}#Z{$xfU5M3Wml^Zm#}nV zPs_bTRV`=ID{i_yB%1HHa6xjJH=@bo{NTWZdOhhAxsu49r6@`X80uAv5oa<4u zm%PYV_+lBJTG7MVGRGzxMm&b3tUU^GaQea^w6t+6Tgz!ym2jLGD{~e_HE~*br&}^{1>tcjvqfD1!U@%E@oHw`1g zl#E0_Ie<&+qrHWdy)F7YqBb|*NM{QA+Wu;L zXVd4+xu?bF{rqs^c1`kP*M5ts(f&`S1=y)zbFPb)ITgIDLJGZx_F2lzL1U#%8G|%_ zwKXf^QgnOa`n+UeZec^)CQ&eKBge4S9p}k$8tu%}5jsOMp9l4VIu1~Jvc069?K(y7 zAlduy^v5kgQpXLs>o5g3BSU7&FIkJ1r45EMhqg2rG9h6VcfA>k>t)sNB4h}@M2S3w zEma4ruFyOqgNvTtIb)r~iu({HS6ILy<}|EmanNeBtTeVb*?UVP>p}WhS(?9yhTcuu zLXf8NWKnLaPBB@69Cg_#qd_rQk@ImZxy=Btce~#qH}}u@9HBSg9H3L&e}1B{c#JlJ zH{BHVwM9vxQ(zQz6iIy%U{zLn5!x4Y}(bhd}r2g9{S*hO+4 zHsPzg&tnF!l$K|4ep<2DS*Y*pD?B1mGaXngElkWJVT+y&TVefcvuNru|1r|z) zG2W#jgFxssTpawjz40!mBXWc|s?m1YI;S;rY;+a)ie1DqCCyNgcT2T?{1)Y=cdAZ; z%7yZNIL4a7==xf1vn`$+f96UP%3EjnKa!FAc&n=HkXN1X!QVw{Bfb8_*c!1yK%$af z|3Wr8ohK5YeD3e|ZiPNd_in#sRkn5k@lL7RZamTLSCBU}FRg~Wq{0Js=hs4({)eFw zp-3c@P@Nnizo53;fx1EtsrGG>_Bb>I_?ErFE0c+te71l_+raqe!0l;ien`RJgvEPU zaiaj^*iln9?82)I!a^IXjFba9Nsj=p&x_3XYe9bqvKO=w+ne22clF}f5pG#SXDeIz zJ0$thES2Ljw9DGSW;=>0ui6g&HaBu z2KhEd|0fyb+Zg@dI5C=akWrrMhcqS*Bz#Poc`M$>sqCpZ5L{qxm9(aOp?wE zT0=>E*@x9g(N4tb)D#C`n$Q8z3^8hQYEijScw%?qB52fDlPtl-(#p+D*zPpsDfm&t zW#74KwlEhC{VmE6mNq#tcTbnG_X^^O4P3}zwq^~yk_RRjye!y~B_=Ek)EJje)KL@M zxMRPB(Sy=M08~O#+H|4rn#HLJZnjE+PwX(a)r4@OeaySZ66wG2BFEaMmGn6cV{epBU2YKL~u$e8AeZ z`l?9glf{}|SsAXu_)S~MNah<~LD&*v-jI4K#N>!^8*6Z)i7A8R7evq=OHbjvl8qZw zb|>4Aw-BurV#ArZk)cgi9a2Defx6*Z54r{9iw;4fBAa4DQ_1W=hrhplVdWB)}5lW_2& zt3dMUudCywd1iR%-K*e2w2QSNPl$%B8!d7z;-r)%3f;}BV@2pEIL??vYE?*r<-8^^ z4mDR%Qk7(#mFkPr4=W5H4fh}xV&?9WPy44^WHgWgvPDDS+?CuFzxUgp#xddjW;4EzxQb z9kCf#nInez4;mdx?3NNhuGun*Ws4F^G_+ZiCHzmA1jjOGoW|wJPBgCSkz{2hBH0!* zH8jf>yO?ssK*dyWEI9VSbwQuz7TMWw?>+_b&$s9)vi9D6i*i$1dyPN7BVh?* zb?xFR!N?Bns?J3ioF^D3!2(Dt5bYz}H{yu+cntAeOsdm#Hz?S+%Cac<3Xa5>XUHUH zfryTM|WLFTk-K}<~hib@Q zEC7?4+r>el*O>)6j<9O>!r(N^QWMa^8U~#&oD^WFkO2S^=RjG z1}dIDeS>J7S@t&PL}#F8SNOTp=80Wh%)diVv0Co#e)%X8`nT+|<>hJ0Oi=-W!r=n* zWk7RKe5Qxv;`ArCGB>qt*ci8GpNN_B0TQ}fOxCCu}8G$W8axt)ee0&Au*6eA3! z3`gh+6QZ{D5v0`v=EJO0uU+e26}smGQ#MFXKwNH4F~M-DrN~m^QD(6`aXPp9s5o+t z)OCK22exp7vV}@wgtU6^Q#W{geQlIlg7P?e381gt1jHI^$&J?eo=(a$4o{~pr(nC= z>!;*RzFxCysq)f`9lbs^E;>DZZj*bHc);rz;pbylzW?1s3}-^X-9{hdlk03}+-qFb zEvq%#ajjy#q{Z6G6p#ZBkFNyYg`*kzP~Jb1)p{7Qw;q8Qfzt$7(~cSAo#QJ-s-c*c zec@vbr2jN|a+c{6m#ynyYn6mT;h(>wV(Hyym#BQN9z;Hl8Q{ z(N7Bmt4CYXd5Lzu4usRqAECGCW%D#dtFbx~Jk*TPM}9uFAnvhB#XM)9+zlbOz z3@OnbH`CF@KfofJ6R}wGj{h}EG*vy^3+Lsgqio6HW}#}y0W2wAfv}wDAL3T98608x zn_-}073+Xz5aH?LU}qC)>Png=VGGP2U6k=M zXQwxH-W(#U+2-+aP6VtD@h0CY$s>>A#L;QvXmiNh8eWxcu18?gjsY0`p+ry00{ZD)om?bvDes^Tr(VxBb|2v)e&m{(x6x=}m(tpq-muDggSa z;&N$ZcT5L|zxr0eTW+V#86k_GdM=8<1-K-dfXiM!)!={=mzT3*8Z z$c|c))b84)XshC)(xvF`je?u6`=i}8eT`{cb!(%k*mNAN)@9L*PegqUfr_c3QgjPk zPS2pNSPY;D?ML^)^t+orMm=M?)=j&?AM=I_uS4(02U(nJP1eghotJfn{9Ii`f{mlK zv0m8@BTlvSjWDZuKqO8DAy}!^yjdhJ01xcQYTmYjZJrH6$3pl*^dgA$05E-S<%&4#AO( zes6ZT!2KmG#sV}Kz_s-`0`IkAJYP>(aPY%twGj0&8#Atn40FWC*YwF5Gk$mu5jFhv z#tsX4y(m7KYIE9tP0;7!eUWifM>y{k`KPn)G2C89*(Yow8=mL$chBJaR760x>*NYS znLOjC0 zFYn<|=UK~@UI5NqgF{-ySh`5YDy>9G12{vS&wzfLN(3K@o*aKWN^&klk0;r97Xx`6 zDDb-t_0iLVO~eI_TFt-q72yD|z~q|>?uhDw7O?<^0_b-D14s$xLOLlMt`+`e$juoo?aYV=!{XouYEQX-L55Ly!ZTXq>l{P zS>u1z7yq9jeOTH5Z>Ak9%YPR!J*+Eln>T{YpdJ=!23*W@Hts;Kn!NeE5rd+Jw-ZL9 zTt@)mCS#e%2pyHKS&tWz5~k-?ld%exQCCoVn3w5E)m;%?A)o=S%Q{q432nIuSDpsd z-``)qhON&&U6ZgwTE2T(=51_PS_F*7GeFeypx=HK1X~c()RM|dpZ(GTHK+SxbDz{1 zO4h)jla=7c)M}jcsKL#>Ghy^bj|C8kr8;qqPPLaLL!=9p4&zj+{#|GBukV^|04P0N z$~T@CT9zKBa)eVR@Go}HlN-43Pt574u0|MKsUQeoBQeC_k?4QCMY}93 zFaKCbKJNHYRB8afKs3HyA!q4nlBksW@2sEFTikb!z3Nn!Upw(F(1nEKZ-wLtVhv69=dy9Yi_hd(DaLF}$>sh1pK& ziEzk}i=BITDGH%X;8K_RU7B*gMY@UesFv(t#R0P{W63S!GPi3yXqnZ}8EamY*1{b` z3k{JN!4F2lY~_&txCQCX78>A0xFPg7S# zcN&5EBFxTY3)DA1v4)QHO`z)2ZZiIm>LB5GiN!RE5G)i~LL~sCW5C5^lZcU)Lg+9W z2SxV_Ob$iH-sKC2rrY>1SUCXN7s zijiuxgqnX`g7KgiS;BJNB!>2lKPRHhf!av@U^HDYqYN6P34XUA1bF!bKub-*C>OGj zn0!R8HX`N(iohG--3Eof^kY!r2qy&G%)ZDgh+`lW9R zS8HnjZ|iqp$qqgl0ZUk%G01=$#saM#B7{URQE+S=j3qtTZx#w|PC6neQ4%8%VfC>h z<$?}95EYP6%RqH7x;c2JW}+0xZ|0$)b}WpqAQ3fG4qV_A?1B~oa{4aS=x^)5`A8PD z5*kt}b#n@w73A-MwHWq>6l)MIE>}zM5Umj23v)h>`5W>kR#VCO3v0c@j1l2xONqbPfQ7YZBkT9fO;u%g$NlAf(l))Y;HtZ!1 zH)|TdxHis>C7h$vpBewkRb}o+&o_wF2IL}|qsQS_2bcJOTPUu19N!*Fj1+|)Qa&>& zbNMg(z!h;*esj8w&} zVU$6RDZ?B{_H*|_?fs<$zZd^D{!Bu~JOeww9XrX_PWqOCVHjo!O7PMb9dO={&C&*w zJ6ZX^OuQVety130W^1<1+WH6BIiE#QYGG3&G-w{G&S#({ToqAL7VFHXA|FtR>5=0t z<+nB-Mx!;Rb{1Ol8qqOcgA_qdYT4eX`&+kJ3D=YR&kE4{2o7(9MyXSZW;rGH5~x^8 zaU!s!hslTsdvjJ$sL;D^fYMEDds;Jj4mc7aYo2uv2QT?u(-QxXm#v06Iou5h4 z(4`Z}=iw_;wuHDdkt;)Vl{K0Uj?u3nJAA0@G;lSaRH`DT&EyYY2wj1R&4Ty6a&OF6 zLmP0hE(2;^M$TDK9TpMOrMcHW{9HRxwh(%LUUrQUkH3e7mA$PSz1m zC56jH2otlhmOu{|Htq_0wXqG{i)z3=Rb8RWRD=y@+i1v|5}jEaLPuqAD_@8T@|M(w z4Hs*MvmFrm(UTeQvXtOLV&9NIViNax99`P@oI0@bX83s%P9!rd5*@t3aY z5~@RvM+1;kJwpnb<*Pn&$N%#( z`geaeD9rIQE_|M~G399xA|k!d>%)W5-}HXqZ0nEYPJ8!VTN-9w-@IRL+=awJ_w4Ah z)}9-O`4~s96L~@&ZyWQ5TEuK#56{LrS4F2LuUV|hlqQGf+VXy=|MUC#=4xm_=$FD0 z=40RP@6*Z_Vwk$oXffja>a$zd%Z@Mu@3xB=Xx3caQ+Y1YbhE}%Gi}2XE;a(m?=3A} z1v#U5B;70>-dI@bT{V>uag&D+ZQghl)ezw3F44NY2yDy2`W!6g7wzJ5% zl0ls+uYSfhj!%pJ)0Ly>vUUG<(096$lkFW*uJ2tQ;T%O-I_>3}?^drynHM_Vh_Br@ ze{=6`ap80-#r>L_x5tCjuac0PJdWFlJ1DrZ7S^A2;H*o2arSvI&wePBI*LS-0~7uD z3$tvwR?}AJ>-p~hA!BD3(P>TSIO}LkKhU>EVp=U54)Q*?~z*=4N$T6u1-Wft02wgvEwt$=@O>&TWmNesvV~l{rOMW$8{0z59Nmh zo9W`Sp4m`)GUsLPWo)|*kxLT%!MXlr6*8;%P`kILHyd?2K6j@zV}+(-U#=+sOU|g% zu!W4iPrXQma$NN5vr-{V?dv4>SohMf(iq^h?i+zQZs z#K+B|YbcNV^O!K;VLS@ex5dA5W^+Okk&wsz@DQZ8g?)3sI=`0rF4mb{ht@ygU-ote zS6YbZ*?viL&t<8I2=NazP$A+UTM<8=0vra$RmYt*;B~1Fu$cWKFNY;~BQ)1I+v*gS zlV~m5Rw>MwTYOp>o7^rAi(v)J9mbj1a0Hy6xtjWH-2VZe0=mCe8S}F7J^*KeYxY~O zOPhveE}Vi~emN!L{wNdrLlBAgDHGdia|%5!SEGm5jDmg}3Mc8;j(qkvV_y^(w3JYJ z!7lrMJ7||W!j@z`GpRrdm^1xnQpM(H?+DJ`o9&p6Q4z& zjLQRXcXWIj!zwLYYiha7na=kzde$d&=T}a~o|Q}h@_lL3triyk zJWW0wYtygC)Je`!pwAH0e)D`q3V3>&%GY~$y!|_wulSKZ zx5w>dBm4j?393xVAH#ju_q26>$~9y(J7V`K6W{GGn7s=PpuD7taVMri&h4$b+znZtFIDQ+{vnQFMuMt71aIC*rkEH zum8&D4Bk&_Io}dbCe52v*n(*zoZI|5s3Ptb{eEg66 zE_UkV1MmPrm-!< zQpU2wr|-#kWgyXgC)yTe!42ZQJIJoxIG6$JB4CKDAEQu5-H1*}eB!y?U=+-|IN1 zRPOI)v}Zi@CdUeyPT)XPnZQ8kSei}kHm+>0x7uX12*}VaeqwODm#p{dEb-$(@ zzqfc9LAM|V7U4>Up&FT*tSIw;i1T`(V)$%ayi9^^S+QJ4m;LrRfJZq$+nm4EN~Pl! zbiljTmJpO8f$aJDr>{C%Rn8bgkPIfbHYWEq1smW43#5NnIQIpD0od3?P5ckx5#xWO z!1MDQn)%=15d$kb`~UJBT0_S+Sp=aZ13~-^y6boM0J?+AlP4qr3Ll}MoRnOC!V|F| zk9;2LJPHV{a$Ki@A9_u++86LA@UT|x2c+ADOyKY!uBqv^D@XBF-@Q$(n_K7ovfe!F0A0W8Ww6cQ{A|$8 zIPeI%0yexbwu07PTEdR74D=rpzoMDXkErngu_gi|sIoU0hG5>6%xFwW0!#p54CAXJ zs9_9Y5fo2w$9V$5ncsB>GAB}J71E_J55&KHdP=1aN&HtWnEnbV9~G0^mqn0jVD@*r zUq4_j<%nhAEGn=BJz-N5zeGOHtXeQF_KjdZ^bNIu6CyLiuCCJ|EJb7-TM!51Zh9Yd zAxtf7znMsWC3#dlNHfZ?B;!C3mL-Y+N;2@5WQBoQ&~1ua^Dk0z-NRIhYb4>v z5*0|%-vaY$ReyeF%^)cO`ADdVqVhyWjDdu#F@H1{9p~W$$*O=ubk%1%=})H|m+c!_ z?UrdgBKaBg39RSM0-&_|6QDOEfn`~I>=4j7_rw(-y6rR--|E<9!7D%`7BOg368kl_ zK`Z(>rs-TN9lM}IX}MEp^CNo&2L(GQ8;HAzCqd%DiG4+&N!DPt)EN7}o-xU>u>o|& z#slTH{Qa@HmN}z+v=*3|v1Q}ammhvbX(C@XakA0XG@0CNUp8}ER<@$9@Ty;X`+Trx z$WYg8b+mDBbT+!UHSSo_#60S9Z>WFgyWT(TC?z%?tavi*_Lk#V~pGd7dCg5Epfu|!H6)|E~)jboT4l29k7vW#w+2Rx^ zui0R1y(c0M9&{A{uKsTJYEbm2BR2dML`tnZst>Jo|2>p{FBQA3{oT#y^V;{&-@o5(>*I5`oGAM~dKF5MnU8BG^Ev5a5(eH;d|Lt> z8jPe&fB{KzDoU-)kyE1l%)Yu5sN7Stf1MF-(wlPhH{uGRZ;1QM5LJ6JAToLPv_^|) zRNR;u-Di<2h+a5IKAb+|%B8b4L%ty$gPDGVF#oBq=t|j3MXHQq%@cVcQMjnHSfO}h zp}F>QT*6_s6%p!uQ2CKeZ7!fUjQr5bSZ0n?vo%eVnw1_CM*4xKsXksi7?i8i9kn(>%nf%8CH`gK4VQ4 zaVgEk4n*kW`JP2WtGPrhiO5}WtG=ib5eN+pjYvvM1!J0uDv{*oGO%U{8)ljgNt|6V zq~t&olM4SeR7mIPVn8kUrboV>4;I+wFaIY;55px!vvd4#9i+swl#mQtPO;MEcku8< z)P#iPY|DN@MkU%vQh2`P;?jnPrYUl*G-{s2VpD0+wf?TAQC?}EPmm+mHX!L(hlX*B z_wf{*D*4fY6N`kMU~nf~*1f`p)6FwZ*N*A4WsWV6x&>DU$K&(yN1QEboet8b)D1Wb zO)lrVgY>J+gG#|I`Ksu-L=ejQG{F?2@WGT2!6_y2hP70~2M8M)wunlp+f`H^kYnOVQ_RnU%S)+@(u(&$h?k`s`C2``&ku-28 z8+;c7w9$jFVy3CqR(yF!) zE|jPy)YLq(izChcy!$-lTo%ZdsSuGU4{h=I7JWTu7Udwd)c4G@Fn$(TOdyY>JSh3h zt@50fe)*?=GTrFfSi2vt1^^1TYFS4J9U97S@IZvanOsE(Wq1n<`@jnpEC_|}$Ia*Z z*L*)UWC>$Mn%nY8JGOM+e2MyYIoe!2$OM#dsTFSL&F$U|4IV{?&m7F0a8Z6wnTBPq z=qP-Qs-Y;gmfee>DXNGIrJ@uSz5U~hC5wTb}sR@pRyqvK- zSTW%cga}1ksz`)!0!Eg+`c5g(Mi)>Sa=_ za>cgCRQS@@A%wMDu(nUfI z34V}3tWpsDW|Ba`F$@{n)lGvi<1zD4WBf?;vcv1r7QeCMW|%D;84}B;xYoNwtpP{D zqSpl{i7g^IP(`7r?tuzHid6^!ky98|f46A-b@xY9eeddpvZTIRW%swAlIyOMjqg6S zyP!@tEU42>q~EN9P11%+w+XB*RXV_8@lT&11`Q zIYhz=W(q+uw3`J{yiBs2HbRP3Xm z-w6&8ZxBC1(QG(Dg>*qn+NWP0f{Ls$jI46f_)pWn0-+ATaN3z)K8*7iR8v@~nuSpF z&Lg1v6vAMkg49!!D&#N7;9 zu?YSEqE|q618I86*r}%$u;(Jg_*nFwans>J3O_j#7xf(oa}bgM@jwJLwPIzxlK>53 zr7`=E1pH*(0w*jIwndX**$=~MM=y&mciV{cvw=%*X=WALy%CZ>i={+f_%hZI2z&_l z5QU1Jg0l<6J4LF;5N&-$y2mm;F&>B?jgv)eL0zP0(aI@)!TvU*?txq)!jl(>;s{8P zOMpD#Y3g&Fa|E>l-RpO7mhCxcBmSx_iI|Zo-T8*^`_6XV} zuYgRbXIY`VXRsW)yl2t83uS1r6zQVfAlKn8XVP)c!D)eZk-uJgfd}L!^`XT~#Tnu= zI64YSfRyS>W+7RM(|}5tl|m>cP%iAM2AD!moO4#(HQBhhW9(AY;9}_r*B1`<#`bRa z%AqT}_r@NZ@1ZYZX&NwZEJQMyXp8m>8@v2i3in6TQiHKYo_UL zNW>FS)X0xKzMEswdY*rzaQWvO8Yj!k>Z*#Bg!>IN2B(1^NZiekXzF z5aF=T`~TA%pr#QqiW$X>V#jk3o`@c%iN&}dZiZ#~GQdp-wtaJ-?xb@QQH{LVRmOdK zXhc;}*Va~3htrXsw=YDVta$uLM!CIhde~lR&lf;7=QW2ef4x>ezX^@>xE|dc7@~bK z(Ujt0eoji|K7P%45eqO!*kqU4|>q`>xC&Fg$|ED2X zwBHh#N-RyCfl+31*>~rTns8%+uEy~^tVC|TzDrh8#!7C<>vWeANHBmd-b@W@Q&dVo z&?7Gr9kl~Ujz1jSx8iPby1Y<}?P=Q#5_3if=3--XNwQJ~m(K$sgMtH+6HlN`ZgP0K z9KVxcH-ZBQGpWgTGrN@!!8C>jRm4)MS*^Na_4vBpj?d~FM~j&9htN@=({VG>mU_lv zDNe6oVA#@JOrpHBbY3d2xSao#5=-U%4n8xtAZt)pKG!TSl-{)ecrxvg5>!FUU#m>v zIZeBh1})ilp~EOMiPbGIy3hrZuVf;b0&&VmKPT0fj3%IHksp8j3J;~-%%wuo{!OVM z5^$5n6;Ua-=zqk>+!OSQrFy&Ol=Iek)Dyw#sc?n$MX<>lIP&3AjkE$f* zqCdRi>7};Pe386GS7p?l->6IX_or-iIwpSu@KZG=I%?nc`3qLGo6*r>unsW;LZFRg z#FYWStUlOUKUzshr`6b(j{ej9%TYFS0KFzUQPi(t$i!<;kq)n9LY7GgDrfRPP2G?;$X;<@GvV|6s|NO0M{37zG11zGZ zEAU2df9K8FTmuzlVbp~8Q1S6XGvSTJoQ4@VQ5c|^ubNAp?iOZNGAeJ5tho7U!g+&bbbaMS;YSXPPT%upt7%4lmU zb%pb(XnP@ME1Rv^)#+R2>vnfQ6-xIfbK6p)>w=JXBw?nfBz!Co`Whe5MWLe>t{)j@2pQ%``L^0&yt96Q>D&7(v7S%v z>*7V#wvx}u>*6jHE3>;A&zI3dEjtw}v;2>S?bx9 z$uSrn4b0`%r1rhvjXuB)?Nro=xVfO761MKl-s1=AZu`=0oWu{W$7hS_fWw#b%SJ;c zw#Jq#OWUhiZ3oenOU?UM>B?>C#WV^E8n0#GBQ-JECc>jNo1Ibekp>Zc)vR++ zxxm>*!D^qc#xqKzBK`%LWW>Lrq$dtK7WJ}HTPA1(T_gP?ayeLR1m1#`V2;I?)4}Uf z?t5~om#Gvp9k6iJU=_mwC0$i}k=YnCy>H~$rl7xg`gvL{G}R|+`n!N*)hr#5>2;x! z(w69QTXjS$nnBsBIsd#%B~}s4;pU?2*OdQd0q>~T)_6WXC^_KIb+@&>dXEON#B0F~ zm~#j)gAMS4@t0{zxet(nwU4SpRUAsOp*W)aSjPnBY8Iiw^%*@=(c2hw>G%DUZ_EYs`+Vx4+a# zb_nC@_b;>=67g1CMKq^f5K_GRUly~BVNse^%r{zjtuM|$0HHW>ThUThPCUraJRMIw zq@1po>9x*Rs6u5wh>Aakk6ZQ9WKD}rQ_21`JhXIKKit>i$$ZOw`J7pMZD4dfpqeiZ zVR}}geb>D#)bmYo^L$b}t66t|Gdp;U_xpu-gFnoLo?XjraOULS`(N}#F+VyrG^#4OdXayT*YHp5AxRfLXOXYSb&~lth!~*M42G)6& zv)%m-yd(T=7LeEgD=rO-gHyI-C9ORF(1X}LXfSwA}!w^=9I@T8)z$+5&hYv1*-5o$b%grl)8!g+O z{R`~t_OWBNzgHl}a*ce_jR8*YP(W)fQyG|1K9x4y-?&?xsw)rDWn!`mHq9ACFg1r)#FOe+reb zv$V2)M|)!B)}kCTy53|)n+{9~VETBtX9ukt3>=x#)y9#lQCm1&M5D!g1_ixNV@w6g z*Y(gB=3C3G;34^6anq}RZC+?8xju%*bhA2EzdFzQA6F(0)sNddRLCQEN1f-bVmob& zT{+fLRgZk&#GhpavBB_eJo(~!0e$vke4_>mOk1{!vM{>kjjm z8_W$Cm^&6QXN2F(s}af?ynI^KtEK9q6Vpa>hSWcFbT^Z31;-?@wFlrj7~zr4L508b z@_SyZd+8__=bibnyJO=~wYEo(&(@{$EwE?$TJ#}JYt1djpJ+NIBo+&2iqW{fE3;M4 zcB>M2-D8Q82PHE@^T;LkzQYmh-I_TpoAKrQCw#0Mxmy2E%cuXH1QrX^zn4#$7};5W zmQNY!>FJc+?TqQ<3@ntKta*7Iog9pRTf;(`ZC7bc#j0o^t}w`ktnR_6N27VdZAoaIK(Dj}F{njU6=fkrk73g?_lRzRbTx(J63lK(s*-nMbQVJosBP<1$Zkh`Al5!Ac2fh`gpAj2r^2 zd0B%IaH>~E$T0gv&d|{Nf-*n+TbYRsl{;AQgf;E0oQ*x#%uhN?UfRka35f z#4PJJWHRi>X_VWu)-`UjqqPZ`XSq6`;_f-{YBE|M^xl_3Xx5=jc`!SYA|s58Pb2W8 z`ekWEr695OnsL-IMX8zzZtvfri*03@(-S%iMb#l@*4)O7_yykObP|Z-!c0wpGIP+& zE{hFVBWG~4rDEl}-PI)c|9yP%p9!iJyY%M5zQLqljz60t&T!MC5V+7A2sB)b2lGoL zVq)3-*)@*kchUkX1LtqX4}yvD1zrD%QdlfZ1RRw@l!;yq016hR%IGQtl_5?PxCk;~ z>E8u4jmjt`q%DYy#^|=+EY>Rot!!sTYJug23{;2=P=3{BZ6?_8Q*&veI(&|?*1p%Q zcosdbV@?4Ea zfh;10UU;wN5%{1Du!EU9OY+MF26BK)jsWTDZ_36#c+QCY8H9hf0#Jg4)x=^okgi+3 zJia2uW-r@X6KvjC3K}#M#fG4eSo|ohee2?32maEe447D86(?Yqpb9w<9RVdMEq8El z`(c_ns(4qHTd+K(gUOe{NtXL>d---8;)HT^Qoxv^rno$16satb!AAYB#PE(oN?Nmy zlEtIi5?d%L82nZ#daIBU;gK!Eaf~S-c@{~^O@KnJ3?u@y*-!(0irLWDh87NbqgxN&D6ND3bS+G@z;B zUaMIj+@Z``M$Li#TH+k2d!zgec~M~jwiGIAL!aXm`h(g#zq{8Hf$(E3(qKpVu0=U?gZXbx*N>BO{K13*FA3u(Y9PU-n zmN#_~d>(+HxCM}u3PtuP;w|8BARYI6c_m&A>!5(RK3DTX(4-T!bG4<`9@!AxVpBQ* zsD5}V$pXQ0Q;-sR6g3j&WX8LhX-JTzPMq*A*4%Gm0z?c_Fq6X%Gbs7js$6x$>@elh zu{yaBDw(h~eJ2fE5MQl5(Gg}5CYybg@_~u2-XbAZ+u(lgoC~+B@QfluE$gtc29a}1 z62IBXr({`!``_J<{&rhKSfSwz6Z@~hp^7Ra+HOy0#y@}8*--Voe`(=pZnfFFSexH% zMW@DMYku5))H6Y*oXE}6lJjgkbMy6hxctn?*=n}bx7Zt4+dtZJLl+)re7l;Pd^uh3 ze&&&+srk;~X>bl49G=!kAE(J< zwo}kczgZq}olUk+WmpN}Z0j7+5V_N3xBF91K9~3)FRXIyOWu z&WPA=y~N4xD|1QEIl)f2VWe-Sb=L9a6wc1}oc3PQcM>a^2Y&%-clCneh|AeO92Y;j zx;QODNv}5dQb$YZJEYQe#Rws^eMXKgooRo%-VWvZFlTo<8aFw=|2gb}86k!w)d-ik zjFdP_XdcW@lWy_3n{n(ha5%rZ4SeRq_-ijBw(yYoQoF zD(3;_Vba*~I`3Z+s-#xqS>auKjy83IBScfEB38Yow*2`eW877f1Cn~3TWZ8(81;j> z$iCAvvPNVGx}6SRTiGW8?{_VDFj~7Y;dNE_3nnN2u3ry(flIbM-(y?AKPMw9g?^Bu zHc{Vfidu4(k4x$1GD@eZN~ub=T}m;4`l!h0(Lv^97+&@>`KU3e588+%-b$HP{<@Rj zP2Xx@t&d*2%lG|;>R{-=xp=iyMM!Ju`S|nP{xg;An<*RX^KBSytyOC~(P}8M)+5f@ z%z0zb}zHx2UN9q7&sanlT2sK z$Y7)(LRV4qQ|X%dwYJ*r9St5&=f;hby44F*M6y9G^Q9i;M!Sc|s zV66$ue01^%y_(SiiM$o4Tv~VZj}%O^;PbLiOl#`eylh z$?+fe#}~P2qO6lg`!P!@RH~`mF&Br&HZL0P&D{g=*q+F|BuAAoA4~#M;uNgo<2WWB z&RqklJ}M^%9;}~I3;GcG9!&RM67bq(rn(-xHFzoZV3XZAMHOF`$f`!uWz^^1KTZv{J@xs-1KkYT@(T)O_!1{I~PI~l*56RNG`W z+wj$yrNqlE?~^Zq+>g^kqdnULU+Znm?q*&e?y1)v=5r2x|A=h7)T zN2H|bR{G?H(!D}SqLR10sfXOj`2uD8;<1IN4*1*U!Oh6x2Bis&ndMD<%Gd70Pj&e>wPq~6B2Fp93;d(w@~Y5`q+!2)KV z95Kz+*L~lrEulwB!7TuNAIL%M-T6UE!u(F=FHv;9IaNGXD8zNz^2(G}YHa1R1G=h) z(x0#8!3NHP8Me=MK^Cy4XDt}r3fZBY?Z7(4?7-NtWq+5dH6UC0vU`J<24u_b26YE8 z!GtJncL6qCI{l2EFx3AYBn{`Lo{Z&0@b<;?&{tfYs*nQQ_2AcHy7={lqYi~P%T_Ce z+}VXxS={Vuk#}4kHU*T@nEB-9Q*b68h=stEvmUku!_@P>O972Y0a$XpKL*O21)<4h za@@Q=)lp;FtY;m->WijZmw;9c&E6)GCiL)ym%j^D?(Ck~rmTBPX?I*XSs!=`;)T2| z90Q8>!f9r<5ekuJw{}=u!6&X;-LL9@ul6}`vT?RF`98V23+cxx$uLTy8`$bPb0Xc# zqxk&As=#{;jqsY5)l@Mz@r7asm<5S&Z1IuBUc{vqyX%vc1suc=HG z+>HR;EkXVb%y5|T5Kw)9x#=0i~6 z$p5G4>Az7d`$<0epXiB!jrD)go3GNCveXel8Hq61qtOl%RBKeu?|S`;lQ$EhUwKbE6AU#MGE7A+ zl7JeqSAa~H4|?#^63d8sPx9myC$$z)nV}`2=O z4Fv%>iqypscq$MgB+Si#>q=49@%?yZ+WG^+YOwNDG3DBFBrMHX=+Brv0IMYE5CkI7 z0XC@wwCZq0hET{t{d`GKtm&o4EPfRfM+wg{6pzWArAK%ap!37D3D}2K2@XlpAAy7; z2^($s(T#Iyf?D_GLCu!83lEJm(umgw9L6ny%`_1X@wY7xa=Mif*(;#n8?;5INNd5g z&PAAyNG#%Wa)PaMa})_=!aKn!&^Dknl!*gSb0^C zBnB#aaHC$1av<*iU9DhWwY>^dfc`BifrZv9$;vqYle^&X`e4x7)o`~z@HN=n41RCx z^>VeC-3;!v)4#QUv@cqZsCJx_-JxVNIm!L0_h9>D+GRs!FSyqlckIJ%h&yk`W`Tq!(bVq6c)wz&|ogLjwbvk>-gtkKu3_Pt@kR zKYF3mW|?TXHI0%{O=ZnLK0UQ9ID764!YK2x1H{b1czgdaw!d)ZE9;HQA*!AU$>mZo zv7-cW)Ig)%t!v};wUU+bW%G6z-UxAy6^cXI1?7p5{u`bP?tS$XMXXZ@=Xo{>=1Uj^ zs*3}V6H)&Tg5HY_1foex`8;5pn4gubmkdad6wrVTM7*ifMx8#KnK;iA+22VCXrEaK zWbij>EI>OJP#s=Sh2hX`1p(ktpAU4tm5U`uvnIFNB=wZ{FD^a%x(_gWM=jO%j(*RR z6jg*tQ!EW*uhCY?MODb@=TYiDkscif{nW{p$a5jPWZP8C)#CftbusaFHC7_@jjFE$ zETO>_h!L;5dDyeTgY)msP&?;mgrBO+Da3LK;)>^NjE|Xn9%QZeI9g!{DtE&xas&Ea z4t&!I7vRfW%;Jy)j0}}?a5<@K!&@%}+PwBHRx?V$kjde0ZVgiWoEuG4kwc=b&GJuL zb6r|!r%K7|{YLvr7SJ0YV2Mf@NfxXU6u*rn)sqvHiVu}3B{-R6@Sf1F;TWsFrR`&} zD``_+I&21KPWQ$Rvhuu0QM3zdr8iG+Zdy5?BRwy`ZM=QoUz$n!;biK5vNBt zJ>je3bVoxf85<}bNo=v-Q7&alK9+zzrrZgZdMuQ0H_0k;O2wX6VSeoDexT-?RP3BP zkB)UnQ6#R&7Egg-HZ6qfarx%1>BXdCeJ*d_TgnY-R%Kdh6M5H!^G3zUt~6{voZ~<> z>FAtq`K%EbZB;6pef{b^92L`ZrNR|ty@58qg)*Sn&RTF10#4eRqb(Wjw z3|;l9+@NH$`Chdi!Ma$iE=Q}VDKH|PTU1H1n5>s@x15i*Rs?6TfcFq)aJ09~RR3;3 zC+obhDHGBylqW?tnN&D^kWf{wnMGKus z3!T|-tMp>r4jF9aJc6dNSMrT*3KceH4H6*8GI6r=5Oc5VZ|)e~6~NKL19 zc4eaV6z8jRhmpB~oHBhLR;GEHUi1)MW<++RC$dbo-qsiGc{%CitGXf6&W`4Keow#q z0k zc=@iAYMW%xQ3cm7(v)B z-|0Y7p8QnMj)+#Ttbp>LlCLD zB1>EtX~I4lQUvo{p0i;R3G6zvC>3LswP6JOdVbm{6Aq>!GGFj8`^7FwV)ky34g8Ej3dBT%z0gBNY9E)#KWi!O!-lqt`kP~k1Ni7&#Z zZ3cOEv{+Vgr?j-3ok!UA)S+3o*%;v_RE}ZXY7&v0JqT%0Mr`Fk4UvUG3BhJWfUK~zUx0p9fSQrmGC|Nv zq09ih@+r*v-2ux*1f3N`mc1)crm&|;&4;$CXDF}G>}eCM!WEu(Y-&DvlrS8%k|oDs z0CCM>frW;Mup}XvrN5%dx*^<}BJ{$@QDGsecxRQW(ocV33}=MrRGnZ)`4jYwiRz0p zDhS7bGKx^M=Z&k|@mGjPkOe8nqsT!t0%?%^0T{&`LofskVbdrSXC_DD3^Pc?&Ic|d zb03n6PhDl=Ul#Xo1DU-5Nec6;Ek1pv(3A?vA;hF0nfC)JNCr}jniBxBk1@)0k0~QN z$q`N1dyX$nQu^>Y76kwBAr+co;+LGG{EHH&Bu~l@kZT4S1d(RNrkT>Xl{U(fcvZsB z8Lu8E?U!4qQ;joWCWQqyZFJmxNyaGY6YM1{za1v-ZuH2auWGaz|d<1{R+Cp_JMtc zDQn!jmY+2$w^$YLq9NCUwU#pBlDO~Mu(gl19NZFdD+YpqG>sM2-O>gWXVo})KSVjZ zEOLj@4(2{_>)2!od=PFG=-`fbrMZjU`>~Q@4k7r{$4uN6sR3TqG&OQ8e_hi{JZ@B# zXi0t)Op}9S6aq<7xf`InSSOMaF>cZtIJNYoEaglW{_iq#XRt}#q;?p5x+Z@|;D#;i za%$7gctc4pFcWY;D>i%TI!XrPwuZO>c@y8irB4~R0#xf-LTv=l`I9d3A&#gD0U(<#d>bUGZJ-VYy_#i4kj!9^fmTqxr;XVdku*Gz8LfMF;ilGQ

    IG^f;=7=Nj4et@ZMegR| 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

    lE zU9YI`8#nJy7+>!+g$F)c+TyrK60TA`H%$YDeDuF(iqw19FG^Vaf8``@Dw)Zz?KfQO zW#KV7zeB`u#BVc!4E#vQxhGuA&;U|FlFBhVc%hOYQ!r$FqjvYM)iTs7YY>8vU5
    x^;x`%`m^8W@N*p5VELLH4>o@ICc6+;V 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
    wU-+2-TqR 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≰6yq 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

    YC3&4BG`aHDWb^8O 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

    CoZtP+R#&eJWxI(C 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 dZ^fq1&lJl8-_ODXFclJgsz93BM>QPe8YB!;qT# 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

    e6Wf61B)L<=cSIGS$(_AZ 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 -wZ!u1o>-*Z8t<-b<`$GP6 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�{xjD|I$va4Fz+pd?8J+k(KNS}*<7L55boFKy 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