From 82e38738a4d532cc3d56cbf80c1a4093f23cdd6a Mon Sep 17 00:00:00 2001
From: tao_z <tzj0429@163.com>
Date: Wed, 14 Jul 2021 07:01:42 +0800
Subject: [PATCH] 调整时钟64MHz。 RTT任务增加马达开启和关闭功能

---
 USR/SRC/pwm.c |   55 ++++++++++++++++++++++++++++++-------------------------
 1 files changed, 30 insertions(+), 25 deletions(-)

diff --git a/USR/SRC/pwm.c b/USR/SRC/pwm.c
index b30d6e5..e94f7f5 100644
--- a/USR/SRC/pwm.c
+++ b/USR/SRC/pwm.c
@@ -9,6 +9,7 @@
  * 
  */
 #include "pwm.h"
+#include "bldc_ctrl.h"
 static volatile uint32_t timer_outcnt = 0;
 /*****************************************************************************************************
 Timer2 is used to speed cal
@@ -24,10 +25,10 @@
 
     timer_deinit(TIMER2);
 
-    timercontralcfg.prescaler = 4799; //48Mhz /4800 =0.01Mhz = 100us
+    timercontralcfg.prescaler = TIMER2_PERIOD; //64Mhz /64 =1Mhz = 1us
     timercontralcfg.alignedmode = TIMER_COUNTER_EDGE;
     timercontralcfg.counterdirection = TIMER_COUNTER_UP;
-    timercontralcfg.period = PERIOD_CAP; //100us*10000=1s
+    timercontralcfg.period = PERIOD_CAP; //1us*30000=30ms
 
     timer_init(TIMER2, &timercontralcfg);
     timer_interrupt_flag_clear(TIMER2, TIMER_INT_UP);
@@ -48,7 +49,7 @@
 *****************************************************************************************************/
 static void Timer0Init(void)
 {
-    uint16_t Duty = PERIOD_CMP / 10;
+    uint16_t Duty = PERIOD_CMP / 2;
     timer_parameter_struct timercontralcfg;
     timer_oc_parameter_struct timeroutcfg[3];
     timer_break_parameter_struct timer_breakpara;
@@ -61,21 +62,21 @@
     timercontralcfg.period = PERIOD_CMP;                 // set period(counter value 0~2^15)
     timer_init(TIMER0, &timercontralcfg);
 
-    timeroutcfg[0].ocpolarity = TIMER_OC_POLARITY_HIGH; //channel output polarity is high
+    timeroutcfg[0].ocpolarity = TIMER_OC_POLARITY_HIGH; //channel output polarity is low
     timeroutcfg[0].ocnpolarity = TIMER_OCN_POLARITY_HIGH;
     timeroutcfg[0].outputstate = TIMER_CCX_ENABLE;    //channel enable
     timeroutcfg[0].outputnstate = TIMER_CCXN_DISABLE; //channel complementary DISABLE
     timeroutcfg[0].ocidlestate = TIMER_OC_IDLE_STATE_LOW;
     timeroutcfg[0].ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;
 
-    timeroutcfg[1].ocpolarity = TIMER_OC_POLARITY_HIGH; //channel output polarity is high
+    timeroutcfg[1].ocpolarity = TIMER_OC_POLARITY_HIGH; //channel output polarity is LOW
     timeroutcfg[1].ocnpolarity = TIMER_OCN_POLARITY_HIGH;
     timeroutcfg[1].outputstate = TIMER_CCX_ENABLE;    //channel enable
     timeroutcfg[1].outputnstate = TIMER_CCXN_DISABLE; //channel complementary  DISABLE
     timeroutcfg[1].ocidlestate = TIMER_OC_IDLE_STATE_LOW;
     timeroutcfg[1].ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;
 
-    timeroutcfg[2].ocpolarity = TIMER_OC_POLARITY_HIGH; //channel output polarity is high
+    timeroutcfg[2].ocpolarity = TIMER_OC_POLARITY_HIGH; //channel output polarity is LOW
     timeroutcfg[2].ocnpolarity = TIMER_OCN_POLARITY_HIGH;
     timeroutcfg[2].outputstate = TIMER_CCX_ENABLE;    //channel enable
     timeroutcfg[2].outputnstate = TIMER_CCXN_DISABLE; //channel complementary  DISABLE
@@ -90,25 +91,25 @@
     timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_1, Duty);
     timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_2, Duty);
 
-    timer_channel_output_mode_config(TIMER0, TIMER_CH_0, TIMER_OC_MODE_PWM1); //set pwm1 mode first low then high
-    timer_channel_output_mode_config(TIMER0, TIMER_CH_1, TIMER_OC_MODE_PWM1);
-    timer_channel_output_mode_config(TIMER0, TIMER_CH_2, TIMER_OC_MODE_PWM1);
+    timer_channel_output_mode_config(TIMER0, TIMER_CH_0, TIMER_OC_MODE_PWM0); //set pwm1 mode first low then high
+    timer_channel_output_mode_config(TIMER0, TIMER_CH_1, TIMER_OC_MODE_PWM0);
+    timer_channel_output_mode_config(TIMER0, TIMER_CH_2, TIMER_OC_MODE_PWM0);
 
-    timer_channel_output_shadow_config(TIMER0, TIMER_CH_0, TIMER_OC_SHADOW_ENABLE); //shadow ENable
-    timer_channel_output_shadow_config(TIMER0, TIMER_CH_1, TIMER_OC_SHADOW_ENABLE);
-    timer_channel_output_shadow_config(TIMER0, TIMER_CH_2, TIMER_OC_SHADOW_ENABLE);
+    timer_channel_output_shadow_config(TIMER0, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE); //shadow ENable
+    timer_channel_output_shadow_config(TIMER0, TIMER_CH_1, TIMER_OC_SHADOW_DISABLE);
+    timer_channel_output_shadow_config(TIMER0, TIMER_CH_2, TIMER_OC_SHADOW_DISABLE);
 
-    /* configure TIMER break function */
-    timer_break_struct_para_init(&timer_breakpara);
-    /* automatic output enable, break, dead time and lock configuration*/
-    timer_breakpara.runoffstate = TIMER_ROS_STATE_DISABLE;
-    timer_breakpara.ideloffstate = TIMER_IOS_STATE_DISABLE;
-    timer_breakpara.deadtime = 255;
-    timer_breakpara.breakpolarity = TIMER_BREAK_POLARITY_LOW;
-    timer_breakpara.outputautostate = TIMER_OUTAUTO_ENABLE;
-    timer_breakpara.protectmode = TIMER_CCHP_PROT_0;
-    timer_breakpara.breakstate = TIMER_BREAK_ENABLE;
-    timer_break_config(TIMER0, &timer_breakpara);
+    // /* configure TIMER break function */
+    // timer_break_struct_para_init(&timer_breakpara);
+    // /* automatic output enable, break, dead time and lock configuration*/
+    // timer_breakpara.runoffstate = TIMER_ROS_STATE_DISABLE;
+    // timer_breakpara.ideloffstate = TIMER_IOS_STATE_DISABLE;
+    // timer_breakpara.deadtime = 32;
+    // timer_breakpara.breakpolarity = TIMER_BREAK_POLARITY_LOW;
+    // timer_breakpara.outputautostate = TIMER_OUTAUTO_ENABLE;
+    // timer_breakpara.protectmode = TIMER_CCHP_PROT_0;
+    // timer_breakpara.breakstate = TIMER_BREAK_DISABLE;
+    // timer_break_config(TIMER0, &timer_breakpara);
 
     timer_primary_output_config(TIMER0, ENABLE);
     timer_auto_reload_shadow_enable(TIMER0);
@@ -125,7 +126,7 @@
 
 void SetPwmDuty(uint16_t ch, uint32_t duty)
 {
-    uint32_t duty_temp = (PERIOD_CMP >= duty) ? (PERIOD_CMP - duty) : 0;
+    // uint32_t duty_temp = (PERIOD_CMP >= duty) ? (PERIOD_CMP - duty) : 0;
     timer_channel_output_pulse_value_config(TIMER0, ch, duty);
 }
 
@@ -145,7 +146,11 @@
 }
 extern void TIMER2_IRQHandler_CallBack(void)
 {
-    timer_outcnt++;
+    if (++timer_outcnt > SPEED_TIMEOUT)
+    {
+        //to do
+        set_bldcm_disable();
+    }
 }
 
 extern uint32_t GetSpeedTimerOutcnt(void)

--
Gitblit v1.8.0