示例#1
0
void wheel_init (void)
{
	pid_enable = TRUE; /* default enable PID */

	encoder_init(); /* initialize tacho encoders */
	motor_init(); /* initialize PWM */

	motor_set_param (WHEEL_LEFT, pid_interval*10, 1, 0, 0); /* dT=100ms, Kp=1 Ki=0, Kd=0 */
	pid_int_init (&pid_l); /* initialize PID controller (left) */

	motor_set_param (WHEEL_RIGHT, pid_interval*10, 1, 0, 0); /* dT=100ms, Kp=1 Ki=0, Kd=0 */
	pid_int_init (&pid_r); /* initialize PID controller (right) */
}
示例#2
0
文件: main.c 项目: jelar11/Frobit
void nmea_rx_parse(void)
{
	if (rx[3] == 'C' && rx[4] == 'T') /* control */
	{
		nmea_wd = 0; /* reset watchdog timeout */
		rx_ite = 5; /* jump to first value */
		vel_set_l = nmea_rx_next_val();
		if (rx_ite != -1)
			vel_set_r = nmea_rx_next_val();
	}
	else if (rx[3] == 'C' && rx[4] == 'P') /* Communication Parameters */
	{
		rx_ite = 5; /* jump to first value */
		pfbst_interval = nmea_rx_next_val();
		if (rx_ite != -1)
			nmea_wd_timeout = nmea_rx_next_val();
	}
	else if (rx[3] == 'S' && rx[4] == 'P') /* System Parameters */
	{
		rx_ite = 5; /* jump to first value */
		voltage_min = nmea_rx_next_val();
	}
	else if (rx[3] == 'W' && rx[4] == 'P') /* Wheel Parameters */
	{
		rx_ite = 5; /* jump to first value */
		pid_enable = nmea_rx_next_val();
		if (pid_enable == 1)
		{ 
			long Kp, Ki, Kd, i_max, feed_fwd;
			pid_interval = nmea_rx_next_val();
			pid_rate = 1000/pid_interval; /* always remember after setting pid_interval */
			if (rx_ite != -1)
			{
				feed_fwd = nmea_rx_next_val();
				if (rx_ite != -1)
				{
					Kp = nmea_rx_next_val();
					if (rx_ite != -1)
					{
						Ki = nmea_rx_next_val();
						if (rx_ite != -1)
						{
							Kd = nmea_rx_next_val();
							if (rx_ite != -1)
							{
								i_max = nmea_rx_next_val();
								wheel_param_received = true;
								motor_set_param (pid_interval, Kp, Ki, Kd, i_max, feed_fwd);
							}
						}
					}
				}
			}
		}
	}
}