赞
踩
1. 在simulink中插入拟合后的曲线;
2. 在拟合曲线的基础上调PID参数,让两条曲线尽量靠近。(上图是累积误差,下图是两个电机的速度曲线)
3. 在simulink中调试成功后,将需要代码的内容,放在一个模块中,打包代码,生成.c文件。
(1)模型中将所有需要打包的部分,放在Motor的模块(自己起任意的名字)中。
(2)点击打包代码
(3)一路next,下面两页需要配置
System页中,需要选择Subsystem,如果你有多个模块,需要自己选择。
Word Size页中,需要选择自己单片机的型号,我的是STM32
(4)获取生成的代码,融入keil工程中。
生成的代码一般在matlab根目录下,xxx_ert_rtw的文件夹中,需要xxx.c、xxx.h、rtwtypes.h。
(1)将xxx.c导入到工程中,头文件包含进来。
(2) 将参数输入,运行算法,获取输出结果。
- // PID control
- rtU.In1 = enc0_signed; // 左电机速度(100ms内编码器感应次数)
- rtU.In2 = enc1_signed; // 右电机速度
- rtU.In3 = pwr0; // 左电机目标速度
- rtU.In4 = pwr1; // 右电机目标速度
- rtU.In5 = servo_duty; // 舵机旋转角度
- rtU.In6 = TIME_INTERVAL; // 运行间隔,100ms/20ms,自己定义
-
- Motor_step(); // PID调整
-
- pwr0 = rtY.Out1; // 输出左电机PWM
- pwr1 = rtY.Out2; // 输出右电机PWM
- servo_pwm = rtY.Out3; // 输出舵机PWM
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。