kind of working
This commit is contained in:
		@@ -14,9 +14,9 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void adcInit() {
 | 
			
		||||
	ADC10CTL0 = ADC10SHT_1 | ADC10ON | SREF_0;
 | 
			
		||||
	ADC10CTL1 = INCH_5;
 | 
			
		||||
	ADC10AE0 = BIT5;
 | 
			
		||||
	ADC10CTL0 = ADC10SHT_0 | ADC10ON | SREF_0;
 | 
			
		||||
	ADC10CTL1 = INCH_7 | ADC10SSEL_3;
 | 
			
		||||
	ADC10AE0 = BIT7;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint16_t adcGet() {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,8 @@ void init() {
 | 
			
		||||
  BCSCTL1 = XT2OFF | RSEL0 | RSEL1 | RSEL2 | RSEL3;
 | 
			
		||||
  BCSCTL2 = 0;
 | 
			
		||||
  BCSCTL3 = 0;
 | 
			
		||||
 | 
			
		||||
  P1DIR |= BIT0 | BIT1 | BIT2 | BIT3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										98
									
								
								src/pwm.cpp
									
									
									
									
									
								
							
							
						
						
									
										98
									
								
								src/pwm.cpp
									
									
									
									
									
								
							@@ -17,77 +17,91 @@
 | 
			
		||||
 | 
			
		||||
volatile Control ctrl((float)PWM_MIN, (float)PWM_MAX, Ctrl_P, Ctrl_I, Ctrl_D);
 | 
			
		||||
 | 
			
		||||
volatile float u_des = 0;
 | 
			
		||||
volatile float u_des = 12.0;
 | 
			
		||||
volatile float u_curr = 0;
 | 
			
		||||
volatile uint16_t newPwm = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void pwmInit() {
 | 
			
		||||
  P1DIR |= BIT6;
 | 
			
		||||
  P1SEL |= BIT6;
 | 
			
		||||
  P1OUT = 0;
 | 
			
		||||
	P1DIR |= BIT6;
 | 
			
		||||
	P1SEL |= BIT6;
 | 
			
		||||
	P1OUT = 0;
 | 
			
		||||
 | 
			
		||||
  TACCR0 = PWM_MAX;
 | 
			
		||||
  TACCR1 = 8;
 | 
			
		||||
  TACCTL0 = CCIE;
 | 
			
		||||
  TACCTL1 = OUTMOD_7;
 | 
			
		||||
  TACTL = MC_1 | ID_0 | TASSEL_2 | TACLR;
 | 
			
		||||
	TACCR0 = PWM_MAX;
 | 
			
		||||
	TACCR1 = 128;
 | 
			
		||||
	TACCTL0 = CCIE;
 | 
			
		||||
	TACCTL1 = OUTMOD_7;
 | 
			
		||||
	TACTL = MC_1 | ID_0 | TASSEL_2 | TACLR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void pwmSet(uint16_t v) {
 | 
			
		||||
  TACCR1 = v;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ISR(TIMER0_A0, TA0_ISR) {
 | 
			
		||||
  static uint8_t cycleCnt = 0;
 | 
			
		||||
  cycleCnt++;
 | 
			
		||||
	static uint8_t cycleCnt = 0;
 | 
			
		||||
	cycleCnt++;
 | 
			
		||||
 | 
			
		||||
  if (cycleCnt >= CYCLE_DELAY) {
 | 
			
		||||
    cycleCnt = 0;
 | 
			
		||||
	if (cycleCnt >= CYCLE_DELAY) {
 | 
			
		||||
		cycleCnt = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    uint16_t adcIn = adcGet();
 | 
			
		||||
    float u_adc = ((float)adcIn) * U_ref / ((float)ADC_MAX);
 | 
			
		||||
    u_curr = u_adc * (R_top + R_bottom) / R_bottom;
 | 
			
		||||
		uint16_t adcIn = adcGet();
 | 
			
		||||
 | 
			
		||||
    float newPwm_f = ctrl.cycle(u_des, u_curr);
 | 
			
		||||
    newPwm = (uint16_t) newPwm_f;
 | 
			
		||||
 | 
			
		||||
    pwmSet(newPwm);
 | 
			
		||||
  }
 | 
			
		||||
		float u_adc = ((float)adcIn) * U_ref / ((float)ADC_MAX);
 | 
			
		||||
		u_curr = u_adc * (R_top + R_bottom) / R_bottom;
 | 
			
		||||
 | 
			
		||||
		float newPwm_f = ctrl.cycle(u_des, u_curr);
 | 
			
		||||
		newPwm = (uint16_t) newPwm_f;
 | 
			
		||||
 | 
			
		||||
//		P1OUT |= BIT1;
 | 
			
		||||
//		for (uint8_t i = 0; i < 16; i++) {
 | 
			
		||||
//			P1OUT |= BIT3;
 | 
			
		||||
//			uint16_t x = newPwm >> i;
 | 
			
		||||
//			if ((x & 1) == 1) {
 | 
			
		||||
//				P1OUT |= BIT2;
 | 
			
		||||
//			} else {
 | 
			
		||||
//				P1OUT &= ~BIT2;
 | 
			
		||||
//			}
 | 
			
		||||
//			P1OUT &= ~BIT3;
 | 
			
		||||
//		}
 | 
			
		||||
//		P1OUT &= ~BIT1;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		TACCR1 = newPwm;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float getDutyCycle() {
 | 
			
		||||
  __disable_interrupt();
 | 
			
		||||
  uint16_t my_newPwm = newPwm;
 | 
			
		||||
  __enable_interrupt();
 | 
			
		||||
  float dutyCycle = ((float)my_newPwm) / ((float)PWM_MAX) * 100.0;
 | 
			
		||||
  return dutyCycle;
 | 
			
		||||
	__disable_interrupt();
 | 
			
		||||
	uint16_t my_newPwm = newPwm;
 | 
			
		||||
	__enable_interrupt();
 | 
			
		||||
	float dutyCycle = ((float)my_newPwm) / ((float)PWM_MAX) * 100.0;
 | 
			
		||||
	return dutyCycle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float getUCur() {
 | 
			
		||||
  __disable_interrupt();
 | 
			
		||||
  float my_u_curr = u_curr;
 | 
			
		||||
  __enable_interrupt();
 | 
			
		||||
  return my_u_curr;
 | 
			
		||||
	__disable_interrupt();
 | 
			
		||||
	float my_u_curr = u_curr;
 | 
			
		||||
	__enable_interrupt();
 | 
			
		||||
	return my_u_curr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float getUDes() {
 | 
			
		||||
  __disable_interrupt();
 | 
			
		||||
  float my_u_des = u_des;
 | 
			
		||||
  __enable_interrupt();
 | 
			
		||||
  return my_u_des;
 | 
			
		||||
	__disable_interrupt();
 | 
			
		||||
	float my_u_des = u_des;
 | 
			
		||||
	__enable_interrupt();
 | 
			
		||||
	return my_u_des;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void setUDes(float uDes) {
 | 
			
		||||
  if (uDes < 0) {
 | 
			
		||||
    uDes= 0;
 | 
			
		||||
  }
 | 
			
		||||
  __disable_interrupt();
 | 
			
		||||
  u_des = uDes;
 | 
			
		||||
  __enable_interrupt();
 | 
			
		||||
	if (uDes < 0) {
 | 
			
		||||
		uDes= 0;
 | 
			
		||||
	}
 | 
			
		||||
	__disable_interrupt();
 | 
			
		||||
	u_des = uDes;
 | 
			
		||||
	__enable_interrupt();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user