小车是52单片机四驱,[url]http://电子罗盘[/url]用的是GY-271模块, 芯片是HMC5883系列。花了一段时间摸索,用这种型号或类似的电子罗盘,大概需要3个步骤完成对智能小车方向的控制
1. 安装[url]http://电子罗盘[/url]。这个比较简单,注意的是电子罗盘怕磁场干扰,装的时候注意位置适当屏蔽,我用的是香烟盒铝箔纸包裹了一层,安放在车头底盘下面
2. [url]http://电子罗盘[/url]角度公式校正。这个网上有很多,因为从芯片读取的角度值旋转一圈轨迹并非标准圆,参考这篇文章(http://wenku.baidu.com/link?url=vDBgrSSNoT2GjW8uS9jMfupwUUrnZjcFlYeL1hVxhnpX4hoVBd3I2PxASPGry3YOHrij3JVKKqI5BFZPNubI7AmM4Of_3BvOPwlPIJ9wmiG)用matlab拟合曲线完成基本的校正,代入到程序计算角度(0-360度)的公式中
3. 方向旋转控制。 0-270度是线性变化的角度值,用判断就可以了。270-360度右旋转或0-90度左旋转,角度值不是线性递增或递减,处理的时候考虑用了sin[url]http://正弦函数[/url](用弧度)。开始怕单片机计算吃不消,不过还好,略有点延迟。
4. 最后的程序纠偏。 前面[url]http://电子罗盘[/url]校正得到的只是近似圆,如果需要再高一点的精度,可以用单片机程序进行校正。360度分成4个区间,根据测试旋转角度大小调整目标角度偏移。
另外如果使用PWM调速,因为52单片机的模拟IIC与PWM冲突(尚未解决),采取的是当需要改变小车方向时,关PWM中断及定时器。可以在操作完了重新打开。
[url]http://电子罗盘[/url]读取数据延迟是不可避免的,所以需要考虑在每次读取的时候增加延迟时间。
演示视频:
1. 安装[url]http://电子罗盘[/url]。这个比较简单,注意的是电子罗盘怕磁场干扰,装的时候注意位置适当屏蔽,我用的是香烟盒铝箔纸包裹了一层,安放在车头底盘下面
2. [url]http://电子罗盘[/url]角度公式校正。这个网上有很多,因为从芯片读取的角度值旋转一圈轨迹并非标准圆,参考这篇文章(http://wenku.baidu.com/link?url=vDBgrSSNoT2GjW8uS9jMfupwUUrnZjcFlYeL1hVxhnpX4hoVBd3I2PxASPGry3YOHrij3JVKKqI5BFZPNubI7AmM4Of_3BvOPwlPIJ9wmiG)用matlab拟合曲线完成基本的校正,代入到程序计算角度(0-360度)的公式中
3. 方向旋转控制。 0-270度是线性变化的角度值,用判断就可以了。270-360度右旋转或0-90度左旋转,角度值不是线性递增或递减,处理的时候考虑用了sin[url]http://正弦函数[/url](用弧度)。开始怕单片机计算吃不消,不过还好,略有点延迟。
4. 最后的程序纠偏。 前面[url]http://电子罗盘[/url]校正得到的只是近似圆,如果需要再高一点的精度,可以用单片机程序进行校正。360度分成4个区间,根据测试旋转角度大小调整目标角度偏移。
另外如果使用PWM调速,因为52单片机的模拟IIC与PWM冲突(尚未解决),采取的是当需要改变小车方向时,关PWM中断及定时器。可以在操作完了重新打开。
[url]http://电子罗盘[/url]读取数据延迟是不可避免的,所以需要考虑在每次读取的时候增加延迟时间。
演示视频:





屁股









