⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 6014_main.c

📁 microchip控制器的motor control 程序
💻 C
字号:
#include <p30f6014.h>
#include <stdio.h>					// 钎霖窃荐 力傍
#include <uart.h>						// RS-232 烹脚侩 窃荐 力傍
#include <timer.h>
#include <adc12.h>					// 10bit侩 Analog to Digital 窃荐 力傍
#include <spi.h>						// SPI 烹脚侩 窃荐 力傍

_FOSC(CSW_FSCM_OFF & EC_PLL16);			// 寇何 努钒 * 16硅狼 努钒栏肺 悼累
_FWDT(WDT_ON & WDTPSA_64 & WDTPSB_4);	// Watch Dog Timer ON, 矫胶袍 促款 矫 磊悼 汗蓖
_FBORPOR(MCLR_EN & PWRT_64 & PBOR_ON & BORV_20 );   
_FGS(CODE_PROT_OFF);

#define LED1			PORTCbits.RC1
#define LED2			PORTCbits.RC2
#define LED3			PORTCbits.RC3
#define LED4			PORTCbits.RC4

#define MAIN_FUN1		PORTAbits.RA12
#define MAIN_FUN2		PORTAbits.RA13

#define APPR1			PORTBbits.RB6
#define APPR2			PORTBbits.RB7
#define APPR3			PORTBbits.RB2

#define MOTOR1_SEL	PORTDbits.RD1
#define MOTOR2_SEL	PORTDbits.RD2
#define MOTOR6_SEL	PORTDbits.RD6
#define MOTOR7_SEL	PORTDbits.RD7

signed int datard;
long delay,del_va;
unsigned long motor6;
unsigned long motor7;
signed int torque[2]={0,0};
signed int pwm[2]={0,0};
unsigned int i=0,j=0,k=0;			// 阿 窜拌 搬沥
unsigned int cnt=0, input_data_pan=880;


void __attribute__((__interrupt__)) _SPI1Interrupt(void)
{
	datard=ReadSPI1();
	IFS0bits.SPI1IF = 0;
	SPI1STATbits.SPIROV = 0;
}

void __attribute__((__interrupt__)) _U1RXInterrupt(void)
{
	static int ch;
	static int seq_no=0;	
	static int input_id;
	static int input_data;
	
	ch = ReadUART1();

	switch(seq_no)
   	{
     	case 0:
      	{
       	 	if(ch==0xff) seq_no=1;       
  	      	else seq_no=0;
         	break;
      	}
      	case 1:
      	{
         	if(ch==0x01 || ch==0x02 || ch==0x03 || ch==0x04) 
         	{
 				input_id=ch;
				seq_no=2;
         	}
         	else seq_no=0;
         	break;
      	}
      	case 2:
      	{
         	input_data = ch;
			if(input_id==0x01)
			{
				if(input_data==0x01)
				{
					LED1=1;
				}
				else
				{
					LED1=0;
				}
			}
			if(input_id==0x02)
			{
				if(input_data==0x01)
				{
					LED2=1;
				}
				else
				{
					LED2=0;
				}
			}
			if(input_id==0x03)
			{
				if(input_data==0x01)
				{
					LED3=1;
				}
				else
				{
					LED3=0;
				}
			}
			if(input_id==0x04)
			{
				if(input_data==0x01)
				{
					LED4=1;
				}
				else
				{
					LED4=0;
				}
			}

         	seq_no=0;
         	break;
      	}
      	default:
      	{
         	seq_no=0;
         	break;
		}
	}

	IFS0bits.U1RXIF = 0;
}


void __attribute__((__interrupt__)) _U1TXInterrupt(void)
{
	IFS0bits.U1TXIF = 0;
}


int main()
{

//*************************************** RS232 Initilization ******************************************************

    ConfigIntUART1(UART_RX_INT_EN &				// EN, DIS
				UART_RX_INT_PR2 &				// 0 ~ 7
				UART_TX_INT_DIS &				// EN, DIS
				UART_TX_INT_PR4);				// 0 ~ 7

    OpenUART1(	UART_EN &					// EN, DIS
				UART_IDLE_CON &				// CON, STOP
				UART_EN_WAKE &				// EN_WAKE, DIS_WAKE
				UART_DIS_LOOPBACK &			// EN_LOOPBACK, DIS_LOOPBACK
				UART_EN_ABAUD &				// EN_ABAUD, DIS_ABAUD
				UART_NO_PAR_8BIT &			// NO_PAR_9BIT, NO_PAR_8BIT, ODD_PAR_8BIT, EVEN_PAR_8BIT
				UART_1STOPBIT,				// 2STOPBITS, 1STOPBIT

				UART_INT_TX_BUF_EMPTY &		// INT_BUF_EMPTY, INT_TX
				UART_TX_PIN_NORMAL &			// NORMAIL, LOW
				UART_TX_ENABLE &				// ENABLE, DISABLE
				UART_INT_RX_CHAR &			// RX_BUF_FUL, RX_3_4_FUL, RX_CHAR
				UART_ADR_DETECT_DIS &			// EN, DIS
				UART_RX_OVERRUN_CLEAR,			// CLEAR

				51);							// 16=115200BPS, 34=57600BPS, 51=38400, 103=19200, Fcy/(16(UxBRG+1))

//*************************************** SPI Initilization **********************************************

	ConfigIntSPI1(SPI_INT_DIS &				// EN, DIS
				SPI_INT_PRI_1);				// 0 ~ 7

	OpenSPI1(	FRAME_ENABLE_OFF &			// ON, OFF
				FRAME_SYNC_OUTPUT &			// INPUT, OUTPUT
				ENABLE_SDO_PIN &				// DISABLE, ENABLE
				SPI_MODE16_ON &				// ON, OFF
				SPI_SMP_ON &					// ON, OFF
				SPI_CKE_OFF &					// ON, OFF
				SLAVE_ENABLE_OFF &			// ON, OFF -> SS 巧阑 ACTIVE肺 荤侩且 巴牢瘤 搬沥
				CLK_POL_ACTIVE_HIGH &			// LOW, HIGH
				MASTER_ENABLE_ON &			// ON, OFF -> MASTER绰 亲惑 ON栏肺 瘤沥
				SEC_PRESCAL_1_1 &				// 1_1 ~ 8_1
				PRI_PRESCAL_4_1,				// 1_1, 4_1, 16_1, 64_1 

				SPI_ENABLE &					// ENABLE, DISABLE
				SPI_IDLE_CON &				// CON, STOP
				SPI_RX_OVFLOW_CLR);			// CLR

//*************************************** A/D Conversion Initilization **********************************************

	SetChanADC12(ADC_CH0_POS_SAMPLEA_AN0 &
			    ADC_CH0_NEG_SAMPLEA_NVREF);     // ADC_CH0_POS_SAMPLEA_AN0, ADC_CHX_POS_SAMPLEA_AN0AN1AN2

	ConfigIntADC12(ADC_INT_DISABLE &			// ENABLE, DISABLE
				ADC_INT_PRI_5);				// 0 ~ 7

	OpenADC12(	ADC_MODULE_ON & 				// ON, OFF
				ADC_IDLE_CONTINUE & 			// IDLE_STOP, IDLE_CONTINUE
				ADC_FORMAT_INTG & 			// SIGN_FRACT, FRACT, SIGN_INT, INTG
				ADC_CLK_AUTO & 				// AUTO, MPWM, TMR, INT0, MANUAL
				ADC_AUTO_SAMPLING_ON & 		// ON, OFF
				ADC_SAMP_ON,					// ON, OFF 

				ADC_VREF_AVDD_AVSS &			// AVDD_AVSS, EXT_AVSS, AVDD_EXT, EXT_EXT
				ADC_SCAN_ON &			     	// ON, OFF
				ADC_SAMPLES_PER_INT_16 &		// 1 ~ 16
				ADC_ALT_BUF_OFF &				// ON, OFF
				ADC_ALT_INPUT_OFF,			// ON, OFF

				ADC_SAMPLE_TIME_0 & 			// 0 ~ 31
				ADC_CONV_CLK_SYSTEM &			// INTERNAL_RC, SYSTEM
				ADC_CONV_CLK_16Tcy,			// Tcy13, Tcy, 3Tcy2 ~ 32Tcy

				ENABLE_ALL_ANA,				// ALL_ANA, ALL_DIG, AN0_ANA~AN15_ANA_ANA

				SCAN_ALL);					// NONE, ALL, SKIP_SCAN_AN0 ~ 15

//*************************************** I/O(D/A) PORT Initilization **********************************************

TRISA = 0b1111000000000000;
TRISB = 0b1111111111111111;
TRISC = 0b0000000000000000;
TRISD = 0b1100000000000000;
TRISF = 0b0000000010010011;
TRISG = 0b0000000001000001;

//*************************************** TIMER Initilization ******************************************************

	ConfigIntTimer1(T1_INT_PRIOR_1 &			// 0~7 => 弥家 1 捞惑 汲沥且 巴
				T1_INT_OFF);					// ON, OFF

	WriteTimer1(0);

	OpenTimer1(	T1_ON &						// ON, OFF
				T1_IDLE_CON &					// CON, STOP
				T1_GATE_OFF &					// ON, OFF
				T1_PS_1_8&				 	// 1_1, 1_8, 1_64, 1_256
				T1_SYNC_EXT_ON &  			// ON, OFF (ON 鞘荐)
				T1_SOURCE_INT,	         	// EXT, INT
				65535);						// Match_value

//*************************************** MAIN **********************************************



	MOTOR6_SEL=1;	ClrWdt();
	MOTOR7_SEL=1;	ClrWdt();


	while(1)
	{
		MOTOR6_SEL = 0;
		WriteSPI1(torque[1]);
		for(delay=0;delay<5;delay++);
		motor6=ReadSPI1();
		MOTOR6_SEL = 1;
		ClrWdt();

		MOTOR7_SEL = 0;
		WriteSPI1(torque[2]);
		for(delay=0;delay<5;delay++);
		motor7=ReadSPI1();
		MOTOR7_SEL = 1;
		ClrWdt();

		printf("m6 = %ld  tor1 = %d  m7 = %ld  tor2 = %d  k = %d\r\n",motor6,torque[1],motor7,torque[2],k);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -