📄 main.c
字号:
case 9: Write_Data(0x20);break;//"space"
case 10: Write_Data(0x30+j2);break;//"0"
case 11: Write_Data(0x30+j3);break;//"0"
case 12: Write_Data(0x30+j6);break;//"0"
case 13: Write_Data(0x30+j7);break;//"0"
case 14: Write_Data(0x20);break;//"space"
case 15: Write_Data(0x4a);break;//"J"
default:break;
}
}
Write_Cmd(0x98); //写第四行的显示地址
for(i = 0; i < 16; i++) //显示Num:--U:--I:--对应的字符
{
switch(i)
{
case 0: Write_Data(0x4e);break;//"N"
case 1: Write_Data(0x75);break;//"u"
case 2: Write_Data(0x6d);break;//"m"
case 3: Write_Data(0x3a);break;//":"
case 4: Write_Data(0x30+Num);break;//"0"
case 5: Write_Data(0x20);break;//"space"
case 6: Write_Data(0x55);break;//"U"
case 7: Write_Data(0x3a);break;//":"
case 8: Write_Data(0x30+u1);break;//"0"
case 9: Write_Data(0x2e);break;//"."
case 10: Write_Data(0x30+u2);break;//"0"
case 11: Write_Data(0x49);break;//"I"
case 12: Write_Data(0x3a);break;//":"
case 13: Write_Data(0x30+i1);break;//"0"
case 14: Write_Data(0x2e);break;//"."
case 15: Write_Data(0x30+i2);break;//"0"
default:break;
}
}
}
#pragma vector=RTC_VECTOR
__interrupt void RTC_ISR(void)
{
switch(__even_in_range(RTCIV,16))
{
case RTC_NONE: // No interrupts
break;
case RTC_RTCRDYIFG: // RTCRDYIFG
//P5OUT ^= 0x01; // Toggles P1.0 every second
t_sec++;
// t_data++;
W0_data = P_data*1;
W_data = W0_data +W_data;
break;
case RTC_RTCTEVIFG: // RTCEVIFG
__no_operation(); // Interrupts every minute
break;
case RTC_RTCAIFG: // RTCAIFG
break;
case RTC_RT0PSIFG: // RT0PSIFG
break;
case RTC_RT1PSIFG: // RT1PSIFG
break;
case 12: break; // Reserved
case 14: break; // Reserved
case 16: break; // Reserved
default: break;
}
}
#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{
static unsigned int index = 0;
switch(__even_in_range(ADC12IV,34))
{
case 0: break; // Vector 0: No interrupt
case 2: break; // Vector 2: ADC overflow
case 4: break; // Vector 4: ADC timing overflow
case 6: // Vector 6: ADC12IFG0
break;
case 8:
break; // Vector 8: ADC12IFG1
case 10: break; // Vector 10: ADC12IFG2
case 12:
A0results[index] = ADC12MEM0; // Move A0 results, IFG is cleared
A1results[index] = ADC12MEM1; // Move A1 results, IFG is cleared
A2results[index] = ADC12MEM2; // Move A2 results, IFG is cleared
A3results[index] = ADC12MEM3; // Move A3 results, IFG is cleared
index++; // Increment results index, modulo; Set Breakpoint1 here
if (index == 8)
index = 0; // Reset index, Set breakpoint 2 here
break; // Vector 12: ADC12IFG3
case 14: break; // Vector 14: ADC12IFG4
case 16: break; // Vector 16: ADC12IFG5
case 18: break; // Vector 18: ADC12IFG6
case 20: break; // Vector 20: ADC12IFG7
case 22: break; // Vector 22: ADC12IFG8
case 24: break; // Vector 24: ADC12IFG9
case 26: break; // Vector 26: ADC12IFG10
case 28: break; // Vector 28: ADC12IFG11
case 30: break; // Vector 30: ADC12IFG12
case 32: break; // Vector 32: ADC12IFG13
case 34: break; // Vector 34: ADC12IFG14
default: break;
}
}
void GPIO_Init()
{
//Drv8412 io configure
P4DIR |= BIT3+BIT4; //TB0.3=>PWM-C,TB0.4=>PWM-D
P4SEL |= BIT3+BIT4;
P7DIR |= BIT3; // DRV8412 RESET,Low Valid
P7OUT &=~BIT3;
P9DIR |= BIT3+BIT2+BIT1; // M1\M2\M3=000,Full Bride Output
P9OUT &=~(BIT3+BIT2+BIT1);
P7DIR &=~BIT2; // /FAULT selsect input
P2DIR &=~BIT1; // /OTW selsect input
P7OUT |= BIT3; // resume normal operation
//ADS1118 SPI IO Configure
P1OUT |= BIT1; // Set P1.1 for CS
P1DIR |= BIT1; // Set P1.1 to output direction
P3SEL |= BIT7; // P3.7 option select
P5SEL |= BIT4+BIT5; // P5.4,5 option select
// P6.0 Measure Frequency
//P6DIR |= BIT0;
//P6OUT |= BIT0;
}
void SPI_Init(void)
{
UCB1CTL1 |= UCSWRST; // **Put state machine in reset**
UCB1CTL0 |= UCMST+UCSYNC+UCMSB; // 3-pin, 8-bit SPI master
// Clock polarity high, MSB
UCB1CTL1 |= UCSSEL_2; // SMCLK
UCB1BR0 = 100; // 50 divder
UCB1BR1 = 0; //
UCB1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
__delay_cycles(100); // Wait for slave to initialize
}
signed int WriteSPI(unsigned int config, unsigned char mode)
{
signed int msb;
unsigned int temp;
volatile signed int dummy;
temp = config;
if (mode==1) temp = 0;
//temp = (config | 0x8000)&(0xfffD);
while(!(UCB1IFG&UCTXIFG));
UCB1TXBUF = (temp >> 8 ); // Write MSB of Config
while(!(UCB1IFG&UCRXIFG));
msb = UCB1RXBUF; // Read MSB of Data
while(!(UCB1IFG&UCTXIFG));
UCB1TXBUF = (temp & 0xff); // Write LSB of Config
while(!(UCB1IFG&UCRXIFG));
msb = (msb << 8) | UCB1RXBUF; // Read LSB of Data
while(!(UCB1IFG&UCTXIFG));
UCB1TXBUF = (temp >> 8 ); // Write MSB of Config
while(!(UCB1IFG&UCRXIFG));
dummy = UCB1RXBUF; // Read MSB of Config
while(!(UCB1IFG&UCTXIFG));
UCB1TXBUF= (temp & 0xff); // Write LSB of Config
while(!(UCB1IFG&UCRXIFG));
dummy = (dummy <<8) | UCB1RXBUF; // Read LSB of Config
__delay_cycles(100);
return msb;
}
void ADS_Config(signed int temp_config_value)
{
signed int Config_Value;
Config_Value = temp_config_value;
//Config_Value = 0x8583; // Initial Config Register
// ADS1118 configuration AIN0/AIN1, FS=+/-2.048, DR=128sps, PULLUP on DOUT
P1OUT &=~ 0x02; // Set CS low
__delay_cycles(100); // Wait for slave to initialize
WriteSPI(Config_Value,0); // Write configuration to ADS1118
__delay_cycles(100); // Wait for slave to initialize
P1OUT |= 0x02; // Set CS high
}
signed int ADS_Read(void)
{
unsigned int Data, Config_Value;
//Config_Value = 0x058B;
Config_Value = 0;
// ADS1118 configuration AIN0/AIN1, FS=+/-2.048, DR=128sps, PULLUP on DOUT
P1OUT &=~ 0x02; // Set CS low
Data = WriteSPI(Config_Value,1); // Read data from ADS1118
P1OUT |= 0x02; // Set CS high
return Data;
}
void PID_Init(void)
{
MinValue=0; //pwmc=1,pwmd=0;
MaxValue=99; //pwmc=0,pwmd=1;
Control.Kp=20;
Control.Ki=0.5;
Control.Kd=0.0;
PID_Set=0; // 差分电压为0V
Control.OutPut=50;
}
unsigned int PID_Work()
{
float Up,Ui,Ud;
float Ax,Bx,Cx,Tx=0.000644; // TX:sampling frequency
Control.ValueSet = PID_Set; //普通增量式PID
CurrentValue = PID_Measure;
Control.E = Control.ValueSet-CurrentValue;
Ax=Control.Kp*(1+Tx/Control.Ki+Control.Kd/Tx);
Bx=Control.Kp*(1+2*Control.Kd/Tx);
Cx=Control.Kp*(Control.Kd/Tx);
Up =Ax*Control.E;
Ui = Bx*Control.E1;
Ud = Cx*Control.E2;
Control.E2 = Control.E1;
Control.E1 = Control.E;
Control.OutPut +=(Up-Ui+Ud);
if(Control.OutPut<MinValue)
Control.OutPut=MinValue;
else if (Control.OutPut>MaxValue)
Control.OutPut=MaxValue;
return (unsigned int)Control.OutPut;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -