Ver código fonte

adc, pwm

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 4 anos atrás
pai
commit
0ae13430ce

+ 1 - 1
Applications/app/app.c

@@ -18,7 +18,7 @@ void app_start(void){
 }
 
 static void _test_timer_handler(timer_t *t){
-	//foc_start_motor();
+	foc_start_motor();
 }
 
 

+ 16 - 6
Applications/bsp/adc.c

@@ -50,6 +50,9 @@ static void _adc0_init(void) {
 	_adc0_insert_chan_init();
 	/* init regular chans*/
 	_adc0_regular_chan_init();
+	adc_interrupt_disable(adc_dev, ADC_INT_EOIC);
+	adc_interrupt_disable(adc_dev, ADC_INT_EOC);
+	adc_interrupt_disable(adc_dev, ADC_INT_WDE);	
     /* enable ADC interface */
     adc_enable(adc_dev);
     delay_ms(1);
@@ -72,6 +75,9 @@ static void _adc1_init(void) {
 	_adc1_insert_chan_init();
 	/* init regular chans*/
 	_adc1_regular_chan_init();
+	adc_interrupt_disable(adc_dev, ADC_INT_EOIC);
+	adc_interrupt_disable(adc_dev, ADC_INT_EOC);
+	adc_interrupt_disable(adc_dev, ADC_INT_WDE);
     /* enable ADC interface */
     adc_enable(adc_dev);
     delay_ms(1);
@@ -87,11 +93,11 @@ static void _adc0_insert_chan_init(void) {
     /* ADC channel length config */
     adc_channel_length_config(adc_dev, ADC_INSERTED_CHANNEL, 1);
     /* ADC inserted channel ran config, use ISQ2,ISQ3 */
-	adc0_update_insert_sample_rank(U_PHASE_I_CHAN);
+	adc_update_insert_sample_rank(adc_dev, U_PHASE_I_CHAN);
 	/* config inserted channel sample time */
-	adc0_update_insert_sample_time(U_PHASE_I_CHAN, ADC_SAMPLETIME_7POINT5);
-	adc0_update_insert_sample_time(V_PHASE_I_CHAN, ADC_SAMPLETIME_7POINT5);
-	adc0_update_insert_sample_time(W_PHASE_I_CHAN, ADC_SAMPLETIME_7POINT5);
+	adc_update_insert_sample_time(adc_dev, U_PHASE_I_CHAN, ADC_SAMPLETIME_7POINT5);
+	adc_update_insert_sample_time(adc_dev, V_PHASE_I_CHAN, ADC_SAMPLETIME_7POINT5);
+	adc_update_insert_sample_time(adc_dev, W_PHASE_I_CHAN, ADC_SAMPLETIME_7POINT5);
     /* ADC trigger config */
     adc_external_trigger_source_config(adc_dev, ADC_INSERTED_CHANNEL, ADC0_1_EXTTRIG_INSERTED_T0_CH3); 
 	/* ADC external trigger enable */
@@ -105,8 +111,12 @@ static void _adc1_insert_chan_init(void) {
     /* ADC channel length config */
     adc_channel_length_config(adc_dev, ADC_INSERTED_CHANNEL, 1);
     /* ADC inserted channel config */
-    adc_inserted_channel_config(adc_dev, 0, VBUS_I_CHAN, ADC_SAMPLETIME_7POINT5);
-	//adc_inserted_channel_config(adc_dev, 1, VBUS_I_CHAN, ADC_SAMPLETIME_7POINT5);
+	adc_update_insert_sample_rank(adc_dev, V_PHASE_I_CHAN);
+	/* config inserted channel sample time */
+	adc_update_insert_sample_time(adc_dev, U_PHASE_I_CHAN, ADC_SAMPLETIME_7POINT5);
+	adc_update_insert_sample_time(adc_dev, V_PHASE_I_CHAN, ADC_SAMPLETIME_7POINT5);
+	adc_update_insert_sample_time(adc_dev, W_PHASE_I_CHAN, ADC_SAMPLETIME_7POINT5);
+
     /* ADC trigger config, slave must config to software trigger */
     adc_external_trigger_source_config(adc_dev, ADC_INSERTED_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE); 
 	/* ADC external trigger enable */

+ 25 - 12
Applications/bsp/adc.h

@@ -105,38 +105,51 @@ static void __inline adc_config_trigger(u32 trigger) {
 }
 
 static bool __inline adc_is_trigged_vbus(void) {
-	if (ADC_CTL1(ADC1) & ADC_TRIGGER_VBUS == ADC_TRIGGER_VBUS) {
+	if ((ADC_CTL1(ADC1) & ADC_TRIGGER_VBUS) == ADC_TRIGGER_VBUS) {
 		return true;
 	}
 	return false;
 }
 
 /* insert len fixed to 2(IL=1), ISQ2 >> ISQ3*/
-static __inline__ void adc0_update_insert_sample_rank(u8 channel) {
-    ADC_ISQ(ADC0) = ADC_RANK_CHANNEL(channel);
+static __inline__ void adc_update_insert_sample_rank(u32 adc, u8 channel) {
+    ADC_ISQ(adc) = ADC_RANK_CHANNEL(channel);
 }
 
-static __inline__ void adc1_update_insert_sample_rank(u8 channel) {
-    ADC_ISQ(ADC1) = ADC_RANK_CHANNEL(channel);
-}
-
-static __inline__ void adc0_update_insert_sample_time(uint8_t adc_channel , uint32_t sample_time)
+static __inline__ void adc_update_insert_sample_time(u32 adc, uint8_t adc_channel , uint32_t sample_time)
 {
     uint32_t sampt;
     /* ADC sampling time config */  
     if(adc_channel < 10U){
-        sampt = ADC_SAMPT1(ADC0);
+        sampt = ADC_SAMPT1(adc);
         sampt &= ~((u32)(ADC_SAMPTX_SPTN << (3U*adc_channel)));
         sampt |= (u32) sample_time << (3U*adc_channel);
-        ADC_SAMPT1(ADC0) = sampt;
+        ADC_SAMPT1(adc) = sampt;
     }else if(adc_channel < 18U){
-        sampt = ADC_SAMPT0(ADC0);
+        sampt = ADC_SAMPT0(adc);
         sampt &= ~((u32)(ADC_SAMPTX_SPTN << (3U*(adc_channel-10U))));
         sampt |= ((u32)sample_time << (3U*(adc_channel-10U)));
-        ADC_SAMPT0(ADC0) = sampt;
+        ADC_SAMPT0(adc) = sampt;
     }
 }
 
+static __inline__ bool adc_eoic_interrupt(void)
+{
+	if (ADC_STAT(ADC0) & ADC_STAT_EOIC){
+		return true;
+	}
+	if (ADC_STAT(ADC1) & ADC_STAT_EOIC){
+		return true;
+	}
+	return false;
+}
+
+static __inline__ void adc_clear_eoic_flags(void) {
+	ADC_STAT(ADC0) &= ~((u32) ADC_STAT_EOIC);
+	ADC_STAT(ADC1) &= ~((u32) ADC_STAT_EOIC);
+}
+
+
 static __inline__ void adc_insert_continue_mode(u32 adc_periph) {
 	ADC_CTL0(adc_periph) &= ~((uint32_t)(ADC_CTL0_DISIC ));
 }

+ 3 - 6
Applications/bsp/mc_irqs.c

@@ -1,5 +1,6 @@
 #include <stdbool.h>
 #include "bsp.h"
+#include "adc.h"
 /*!
     \brief      this function handles NMI exception
     \param[in]  none
@@ -86,14 +87,10 @@ void SysTick_Handler(void) {
 
 void ADC0_1_IRQHandler(void)
 {
-	if (adc_interrupt_flag_get(ADC0, ADC_INT_FLAG_EOIC) == SET) {//phase I samples
-    	/* clear the ADC flag */
-    	adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
+	if (adc_eoic_interrupt()) {//phase I samples
 		mc_phase_current_irq();
-	}
-	if (adc_flag_get(ADC1, ADC_FLAG_EOIC) == SET) {//vbus I sampes
     	/* clear the ADC flag */
-    	adc_flag_clear(ADC1, ADC_FLAG_EOIC);
+		adc_clear_eoic_flags();
 	}	
 }
 

+ 2 - 2
Applications/bsp/pwm.c

@@ -145,11 +145,11 @@ static void _init_pwm_timer(void) {
 	}else {
 		timer_master_slave_mode_config(timer,TIMER_MASTER_SLAVE_MODE_DISABLE);
 	}
-    timer_primary_output_config(timer,ENABLE);
+    //timer_primary_output_config(timer,ENABLE);
     /* auto-reload preload enable */
     timer_auto_reload_shadow_enable(timer);
 
-	timer_interrupt_enable(timer, TIMER_INT_UP);
+	timer_interrupt_disable(timer, TIMER_INT_UP);
 	timer_interrupt_flag_clear(timer, TIMER_INT_FLAG_UP);
 	nvic_irq_enable(TIMER0_UP_IRQn, 1, 0);	
 	

+ 1 - 1
Applications/bsp/uart.c

@@ -12,7 +12,7 @@
 #define SHARK_UART0_rx_port				GPIOB
 #define SHARK_UART0_rx_pin				GPIO_PIN_11
 #define SHARK_UART0_irq					UART3_IRQn
-#define SHARK_UART0_clk					RCU_USART0
+#define SHARK_UART0_clk					RCU_UART3
 #define SHARK_UART0_tx_gpio_clk			RCU_GPIOB
 #define SHARK_UART0_rx_gpio_clk			RCU_GPIOB
 #define SHARK_UART0_tx_dma				DMA1

+ 1 - 1
Applications/foc/foc_stm.c

@@ -67,7 +67,7 @@ void FOC_Normal_Task(motor_foc_t *foc) {
 			break;
 		case RAMPING_START:
 			foc_set_dq_command(0.0f, ramp_get_target(&foc->voltage_ramp));
-			printf("target %f\n", ramp_get_target(&foc->voltage_ramp));
+			//printf("target %f\n", ramp_get_target(&foc->voltage_ramp));
 			if (foc_get_speed() >= RPM_FOR_CLOSE_LOOP){
 				//foc_stm_nextstate(CLOSED_LOOP);
 				//foc_overide_vdq(false);

+ 1 - 1
Applications/foc/phase_current.c

@@ -24,6 +24,7 @@ static __inline__ void _calc_mos_rds(u32 Vds, u32 Ids, float *dest) {
 
 void phase_current_init(current_samp_t *cs) {
 	cs->offset_sample_count = NB_OFFSET_SAMPLES;
+	cs->vbus_i_invert = INVERT_NO;
 	cs->Rds_a = Rds_Defualt;
 	cs->Rds_b = Rds_Defualt;
 	cs->Rds_c = Rds_Defualt;
@@ -139,7 +140,6 @@ void phase_current_adc_triger(current_samp_t *cs){
 	}else {
 		adc_config_trigger(ADC_TRIGGER_PHASE);
 		adc_phase_inserted_config(cs->sector);
-		cs->sector = (cs->sector + 1)%6;
 	}
 }
 

+ 7 - 7
Project/MC100.uvoptx

@@ -135,7 +135,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGUARM</Key>
-          <Name></Name>
+          <Name>d</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -218,7 +218,7 @@
 
   <Group>
     <GroupName>Application</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -250,7 +250,7 @@
 
   <Group>
     <GroupName>Foc</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -402,7 +402,7 @@
 
   <Group>
     <GroupName>Math</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -434,7 +434,7 @@
 
   <Group>
     <GroupName>Proto</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -454,7 +454,7 @@
 
   <Group>
     <GroupName>Libs</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -546,7 +546,7 @@
 
   <Group>
     <GroupName>BSP</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>