Muestra de OpenHarmony: desarrollo de automóviles Hongmeng

Resumen : Este artículo presenta brevemente el desarrollo del automóvil WiFi para el sistema Hongmeng + Hi3861

Grupo adecuado : adecuado para placa de desarrollo Runhe Hi3861

Todos los repositorios de código en este artículo: https://gitee.com/qidiyun/hihope-3861-smart-home-kit

13.1 Introducción al coche

Coche WiFi basado en el sistema Hongmeng + Hi3861

En primer lugar, necesitamos tener un kit de automóvil WiFi, que en realidad es Hi3861 más motor, módulo de seguimiento, ultrasonido y otros módulos.

Una vez instalado el coche, probablemente se verá así:
Insertar descripción de la imagen aquí

13.2 Motorización

Aquí primero solo haremos lo más simple: accionar el motor del automóvil para que funcione.

La placa controladora del motor se muestra a continuación. El chip controlador del motor actual utiliza el chip L9110S.

Desarrollo de sistema liviano OpenHarmony 【13】 Desarrollo de automóviles Hongmeng: comunidad tecnológica Hongmeng HarmonyOS

El circuito de aplicación típico es el que se muestra a continuación:
Insertar descripción de la imagen aquí

Podemos ver que si queremos controlar el motor, nuestro chip necesita al menos 2 señales PWM, una para controlar la rotación hacia adelante y otra para controlar la rotación hacia atrás.

Entonces nuestro coche tiene dos ruedas y necesita dos motores, por lo que necesitamos 4 señales PWM.

Después de verificar la información del automóvil, podemos saber que los PWM de 4 canales que utiliza actualmente el chip Hi3861 para controlar el motor son:

Desarrollo de sistema liviano OpenHarmony 【13】 Desarrollo de automóviles Hongmeng: comunidad tecnológica Hongmeng HarmonyOS

Ahora que conocemos el canal PWM y el puerto GPIO correspondiente, podemos empezar a programar.

Primero la parte de inicialización de PWM:

void pwm_init(void)
{
    
    
	hi_gpio_init();
	//引脚复用
	hi_io_set_func(HI_IO_NAME_GPIO_0, HI_IO_FUNC_GPIO_0_PWM3_OUT); 
    hi_io_set_func(HI_IO_NAME_GPIO_1, HI_IO_FUNC_GPIO_1_PWM4_OUT); 	
	hi_io_set_func(HI_IO_NAME_GPIO_9, HI_IO_FUNC_GPIO_9_PWM0_OUT); 
    hi_io_set_func(HI_IO_NAME_GPIO_10, HI_IO_FUNC_GPIO_10_PWM1_OUT); 

	//初始化pwm
	hi_pwm_init(HI_PWM_PORT_PWM3);
    hi_pwm_init(HI_PWM_PORT_PWM4);
	hi_pwm_init(HI_PWM_PORT_PWM0);
    hi_pwm_init(HI_PWM_PORT_PWM1);

}

Funciones para controlar el coche hacia adelante, hacia atrás, girar a la izquierda, girar a la derecha y detenerse:

//停止
void pwm_stop(void)
{
    
    
	//先停止PWM
	hi_pwm_stop(HI_PWM_PORT_PWM3);
    hi_pwm_stop(HI_PWM_PORT_PWM4);
	hi_pwm_stop(HI_PWM_PORT_PWM0);
    hi_pwm_stop(HI_PWM_PORT_PWM1);
}
void car_stop(void)
{
    
    
	car_info.cur_status = car_info.go_status;

	printf("pwm_stop \r\n");

	pwm_stop();
}

//前进
void pwm_forward(void)
{
    
    
	//先停止PWM
	hi_pwm_stop(HI_PWM_PORT_PWM3);
    hi_pwm_stop(HI_PWM_PORT_PWM4);
	hi_pwm_stop(HI_PWM_PORT_PWM0);
    hi_pwm_stop(HI_PWM_PORT_PWM1);

	//启动A路PWM
	hi_pwm_start(HI_PWM_PORT_PWM3, 750, 1500);
	hi_pwm_start(HI_PWM_PORT_PWM0, 750, 1500);
}
void car_forward(void)
{
    
    
	if(car_info.go_status != CAR_STATUS_FORWARD)
	{
    
    
		//直接退出
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
    
    
		//状态没有变化,直接推出
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_forward \r\n");

	pwm_forward();

	step_count_update();
}

//后退
void pwm_backward(void)
{
    
    
	//先停止PWM
	hi_pwm_stop(HI_PWM_PORT_PWM3);
    hi_pwm_stop(HI_PWM_PORT_PWM4);
	hi_pwm_stop(HI_PWM_PORT_PWM0);
    hi_pwm_stop(HI_PWM_PORT_PWM1);

	//启动A路PWM
	hi_pwm_start(HI_PWM_PORT_PWM4, 750, 1500);
	hi_pwm_start(HI_PWM_PORT_PWM1, 750, 1500);
}
void car_backward(void)
{
    
    
	if(car_info.go_status != CAR_STATUS_BACKWARD)
	{
    
    
		//直接退出
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
    
    
		//状态没有变化,直接推出
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_backward \r\n");

	pwm_backward();

	step_count_update();
}

//左转
void pwm_left(void)
{
    
    
	//先停止PWM
	hi_pwm_stop(HI_PWM_PORT_PWM3);
    hi_pwm_stop(HI_PWM_PORT_PWM4);
	hi_pwm_stop(HI_PWM_PORT_PWM0);
    hi_pwm_stop(HI_PWM_PORT_PWM1);

	//启动A路PWM
	hi_pwm_start(HI_PWM_PORT_PWM3, 750, 1500);
}
void car_left(void)
{
    
    
	if(car_info.go_status != CAR_STATUS_LEFT)
	{
    
    
		//直接退出
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
    
    
		//状态没有变化,直接推出
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_left \r\n");

	pwm_left();

	step_count_update();
}

//右转
void pwm_right(void)
{
    
    
	//先停止PWM
	hi_pwm_stop(HI_PWM_PORT_PWM3);
    hi_pwm_stop(HI_PWM_PORT_PWM4);
	hi_pwm_stop(HI_PWM_PORT_PWM0);
    hi_pwm_stop(HI_PWM_PORT_PWM1);

	//启动A路PWM
	hi_pwm_start(HI_PWM_PORT_PWM0, 750, 1500);
}
void car_right(void)
{
    
    
	if(car_info.go_status != CAR_STATUS_RIGHT)
	{
    
    
		//直接退出
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
    
    
		//状态没有变化,直接推出
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_right \r\n");

	pwm_right();

	step_count_update();
}

Finalmente, para usar la función pwm, necesitamos modificar

dispositivo/soc/hisilicon/hi3861v100/sdk_liteos/build/config/usr_config.mk

Agregue estas dos líneas, aquí es para activar la función PWM

CONFIG_PWM_SUPPORT=y

CONFIG_PWM_HOLD_AFTER_REBOOT=y

Desarrollo de sistema liviano OpenHarmony 【13】 Desarrollo de automóviles Hongmeng: comunidad tecnológica Hongmeng HarmonyOS

13.3 Parte de control WiFi

Simplemente escribimos un programa UDP en el automóvil para escuchar el número de puerto 50001. El formato de comunicación utilizado aquí es json. Después de que el automóvil recibe los datos UDP, analiza el json y realiza las operaciones correspondientes de acuerdo con el comando, como avanzar, retroceder, girar a la izquierda, girar a la derecha, etc.

Desarrollo de sistema liviano OpenHarmony 【13】 Desarrollo de automóviles Hongmeng: comunidad tecnológica Hongmeng HarmonyOS

En el lado de la computadora, use C # para escribir un programa de prueba. Puede ingresar manualmente la dirección IP del automóvil, o no necesita ingresar la dirección IP. De esta manera, el programa del lado de la computadora enviará un paquete de transmisión al coche, que también puede tener una función de control.

Desarrollo de sistema liviano OpenHarmony 【13】 Desarrollo de automóviles Hongmeng: comunidad tecnológica Hongmeng HarmonyOS

13.4 Conexión de punto de acceso WiFi

Tenga en cuenta que el SSID predeterminado del firmware WiFi del automóvil aquí para conectarse al punto de acceso es:

Desarrollo de sistema liviano OpenHarmony 【13】 Desarrollo de automóviles Hongmeng: comunidad tecnológica Hongmeng HarmonyOS

Los lectores deben modificarlo según sus propios puntos calientes.

Archivo: sta_entry.c

El código fuente del automóvil y el código final de control C# son todos de código abierto, puede modificarlos libremente y usar su imaginación para crear productos de bricolaje más potentes y geniales.

Supongo que te gusta

Origin blog.csdn.net/aa120515692/article/details/123250204
Recomendado
Clasificación