• zrobot小车的控制


         小车是好不容易到货了,然后又等了两天放出了源代码,以为一切很顺利,可惜啊,提供的源码和光盘里面提供东西肯定是不匹配的,好坑啊。真不知道负责这事儿的是谁。。

         第一步:测试提供的最终文件,当时就是把光盘里面的相关boot.bin设备树内核等东西拷贝进去,启动,安卓手机连上或者电脑无线连接上,前后左右都能够成功控制。一切很好。

         第二步: 从google code下载了源码,首先看了下smart_car_HW这个XPS工程,发现利用了一个自定义了一个PWM核,有四个输出,分别控制四个电机;另外还有一个8位宽的GPIO口,连接了4个LED等和JA的四个口,从工程的UCF文件可以看出连接关系是这样的:

      GPIO[3:0]连接了LED7,6,5,4;

      GPIO[7: 4]连接了JA1.JA4,JA8,JA10;

      PWM_out[3:0] 连接了JA 2,JA3,JA7,JA9;

       由于没得下层控制板的原理图,但是由上基本可以推断每个电机的控制由一路PWM波形和一个信号线控制正转和反转;

       可是这个smart_car_HW工程直接编译就有个明显的错误,说UCF文件里面有个管脚有问题,一看,还真是坑啊,居然有这个net pwm_ip_0_dir_out_pin<2> LOC = AB11 | IOSTANDARD = LVCMOS33;    # JA7名字都是错的,应该是net pwm_ip_0_pwm_out_pin<2> LOC = AB11 | IOSTANDARD = LVCMOS33;    # JA7,想想以为明显的小错误也可以原谅,于是修改了继续重新生成bit文件,还是报错,这次报错我就没看出什么问题了,好吧,放弃提供的工程,于是我自 己把有用的PWM这个自定义IP核加载我下载digilent公司的提供的XPS工程xps_proj,在这个工程加上PWM,GPIO分别照着一下关系 分配了引脚

      GPIO[3:0]连接了LED7,6,5,4;

      GPIO[7: 4]连接了JA1.JA4,JA8,JA10;

      PWM_out[3:0] 连接了JA 2,JA3,JA7,JA9;

    弄好了,然后生成了boot.bin,内核启动一切都搞定了

    第三步:

        将提供的驱动编译了一下,然后加载内核,关于这个驱动我想说的是只能加载,不能够卸载,这个是不知道是不是我这里才有这个问题,还是说我用的卸载命令rmmod的原因。这个都是小问题,关键是什么呢,关键是我加载了驱动,cd /sys/class/mydriver/my_device/ 然后ls 了一下,什么value ,direction ,pwm1_speed,pwm2_speed,...这些都有的,于是测试四个轮子了

    echo 7000 > pwm1_speed。。。四个pwm都测试了,只有两个轮子动,一个正转一个反转,写value没什么变化。看来这个有问题

    第四步:

         解决办法,回到光盘提供的文件,弄到SD卡去,启动后,通过控制stop,go,back left back的时候用万用表检测JA上的信号。不检测不知道,一检测,天雷滚滚啊。,,这下载的源码工程smart_car_hw里面的UCF完全不对应啊,于是得出结论:下载的源码和光盘里面的内容根本不对应。也就是说光盘里面很多东西根本就不是通过这个源码得到的。。吭。。。坑。。。。坑归坑,还是继续检测,于是得出:

    JA1-4是控制电机正转和反转的,

    JA-7-10是PWM波形,

    然后就是修改了自己的XPS工程,将UCF的引脚分配重新分配了,生成boot .bin加载内核,启动,测试,echo 7000 > pwm1_speed

    echo 7000 > pwm2_speed,echo 7000 > pwm3_speed,echo 7000 > pwm4_speed,这些这四个轮子终于正常工作了,可是写value的值0xFF 想达到反转的效果就是不行。自己一分析,觉得原因在于在驱动mydriver中写value的值的时候,只是用了outb(num, mygpio_addr);这个函数,可是这个值num根本没有写到GPIO口上去,因为这个GPIO口是软件自带了,不是我们自定义的Ip核,所以要想 控制这个GPIO,需要知道这个GPIO的逻辑实现是怎么实现的,或者需要知道怎么通过调用函数使用这个GPIO,但是调用函数使用GPIO的方法就跟在 SDK下面写裸跑软件控制一样的,但是一想到把这些函数弄到linux驱动里面去,我觉得麻烦。。

    第五步:

         修改PWM这个IP核

         所有的问题已经发现了,就是解决了,我于是修改了PWM核1.04版本,在原来的基础上,增加8个输出,分别控制了4个LED,和JA1-4,pwm_out【3:0】控制JA1-10,测试,终于能够成功控制四个轮子和正转反转了。。

    第六步:总结

          在这个过程中,虽然提供了代码,也有参考价值,不过为什么这个一个大公司做的事情这么坑,不像一个正规公司的风格;感觉还是挺坑的;其次,没有给出下层控 制板的电路图,我只能根据提供的光盘资料,运行测电压,看效果,分析猜测电机控制的接口情况。,最后还是觉得提供的源码有点坑,跟光盘里面的不一致。结果 从昨天到今天都在弄这个东西,到现在也只是把四个电机摸清楚了。。

  • 相关阅读:
    世界城堡论坛
    瑞典皇家理工学院工程实例:An Advanced Speech Codec for a Voice over IP Transmission System
    压缩域丢包补偿:Demo of Compressed Domain Packet Loss Concealment of Sinusoidally Coded Speech
    音频编解码器五大模块之:T
    瑞典皇家理工学院工程实例:Acoustic measurement system
    VOIP Codec 三剑客之 ISAC/ILBC ISAC (5) LPC Parameter Encode 模块
    通信语音音质评估:
    Frank Klemm's Musepack Page
    瑞典皇家理工学院工程实例:Sound localization
    Frank Klemm's Dither and Noise Shaping Page: Dither and Noise Shaping In MPC/MP+
  • 原文地址:https://www.cnblogs.com/winnter/p/3041671.html
Copyright © 2020-2023  润新知