当前位置:网站首页>Analog rocker controlled steering gear

Analog rocker controlled steering gear

2022-07-04 22:39:00 Let everything burn

Mission :

Potentiometer and steering gear combined application , If it is 180° The steering gear , The effective range of potentiometer is also 180°, If it is 90° The steering gear , The effective range of potentiometer is 90°, Potentiometer and steering gear angle position are synchronized , The effective starting point of potentiometer is self-determined , The finish for ( The starting point +90°/180°)
 

Ideas

The potentiometer on the yangtao development board is the omnidirectional rocker on the left , With rocker x Axis or y The axis controls the angle of the steering gear
For example, the rocker on the far left corresponds to the steering gear 0°, Pull to the rightmost steering gear and turn 180°
The angle of the steering gear is evenly distributed at the beginning and end of the rocker
The rocker is essentially an adjustable resistor , After the resistance voltage is divided, the single chip microcomputer can be used ADC Get location status

Completion code

int main (void){
    // The main program 

	 
	delay_ms(500); // Wait for other devices to be ready when powered on 
	RCC_Configuration(); // System clock initialization  
	TOUCH_KEY_Init();// Touch the button to initialize 
	RELAY_Init();// Relay initialization 


	TIM3_PWM_Init(59999,23); 
	ADC_Configuration(); //ADC Initialize settings ( Simulate the of the rocker ADC initialization )
	JoyStick_Init(); // Simulate the key initialization of the rocker 

	I2C_Configuration();//I2C initialization 
	OLED0561_Init(); //OLED initialization 
	OLED_DISPLAY_8x16_BUFFER(0," YoungTalk "); // display string 
	OLED_DISPLAY_8x16_BUFFER(2," ADC TEST "); // display string 
	OLED_DISPLAY_8x16_BUFFER(4," ADC_IN6: "); // display string 
	OLED_DISPLAY_8x16_BUFFER(6," ADC_IN7: "); // display string 


	while(1){
    
		// Turn the of the photoresist ADC The data is shown in OLED On 
		OLED_DISPLAY_8x16(4,10*8,ADC_DMA_IN[0]/1000+0x30);//
		OLED_DISPLAY_8x16(4,11*8,ADC_DMA_IN[0]%1000/100+0x30);//
		OLED_DISPLAY_8x16(4,12*8,ADC_DMA_IN[0]%100/10+0x30);//
		OLED_DISPLAY_8x16(4,13*8,ADC_DMA_IN[0]%10+0x30);//

		OLED_DISPLAY_8x16(6,10*8,ADC_DMA_IN[1]/1000+0x30);//
		OLED_DISPLAY_8x16(6,11*8,ADC_DMA_IN[1]%1000/100+0x30);//
		OLED_DISPLAY_8x16(6,12*8,ADC_DMA_IN[1]%100/10+0x30);//
		OLED_DISPLAY_8x16(6,13*8,ADC_DMA_IN[1]%10+0x30);//


 // Method 1 : Inter partition control ( Simple but troublesome )
// if(ADC_DMA_IN[0]<100)
// TIM_SetCompare3(TIM3,1500); 
//
// if(ADC_DMA_IN[0]>=100&&ADC_DMA_IN[0]<1700)
// TIM_SetCompare3(TIM3,ADC_DMA_IN[0]+1500);
// if(ADC_DMA_IN[0]>=1700&&ADC_DMA_IN[0]<2000)
// TIM_SetCompare3(TIM3,ADC_DMA_IN[0]+2300);
//
// if( ADC_DMA_IN[0]>=2000&&ADC_DMA_IN[0]<3500)
// TIM_SetCompare3(TIM3,ADC_DMA_IN[0]+2500);
// if( ADC_DMA_IN[0]>=3500&&ADC_DMA_IN[0]<4000)
// TIM_SetCompare3(TIM3,ADC_DMA_IN[0]+3500);
// 
// if( ADC_DMA_IN[0]>4000)
// TIM_SetCompare3(TIM3,7500);
// delay_ms(10);

 // Method 2 : Write formula conversion ( Difficult but convenient )

			TIM_SetCompare3(TIM3,ADC_DMA_IN[0]*(3.3/4096)*1820+1500);
	

		if(GPIO_ReadInputDataBit(JoyStickPORT,JoyStick_KEY)==0){
    
	
			OLED_DISPLAY_8x16(0,0,'Y');//
		}else{
    
			OLED_DISPLAY_8x16(0,0,' ');//
		}
		delay_ms(200); // Time delay 
	}
}
原网站

版权声明
本文为[Let everything burn]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/185/202207042208243590.html