【TI-RSLK 试用报告】+ 远控机器人

  [复制链接]

1

主题

3

帖子

117

积分

二氧化硅

Rank: 2

积分
117
查看: 11713回复: 8 发表于 2019-3-27 19:41:08   只看该作者
本帖最后由 电赛小编 于 2019-4-11 17:39 编辑

      项目完成了,首先先感谢下物电学院的邹老师,在制作的过程中提供了很多帮助;其次就是小编姐姐了,从年前的项目申请到最终项目的提交中间有很多需要沟通协商的事情,辛苦了。这篇报告分两大块,第一部分是开箱过程,讲解各模块使用芯片方案及相关资料。第二部分就是开发过程了,讲解了使用官方库配置以及MDK环境下程序的编写,并最终封装成驱动库开源给大家,方便大家使用。像寻迹模块、红外遥控模块、电机方向及调速相关部分都完成了,基本上都有注释,但难免有bug个,权当抛砖引玉了,大家一起来完善吧。



开箱过程
01.jpg
早上接到顺丰的配送短信,中午去领的,好大一个箱子,期间又签了一个捐赠协议才抱回来。


02.jpg
快递箱拆开里面共有俩盒子,一个是小车套件的另外一个就是MSP432的开发板了。


03.jpg
小车套件盒的侧边说明,可以看出这一款是迷宫机器人,比官方的应该是少了距离传感器。


04.jpg
小车盒子里的全部配件,包装做的比较细致,每个零件袋子上都做了说明,方便后续组装。


05.jpg
另一个盒子:MSP432P401R的开发板。


06.jpg
launchpad一贯的风格。一个板子 一根数据线 一张卡片


07.jpg
MSP432P401R launchpad正面


08.jpg
MSP432P401R launchpad反面


09.jpg
MSP432P401R 芯片

      Ti-rslk是围绕MSP432P401R LaunchPad构建的。MSP432系列单片机是Ti采用ARM Cortex – M4F 内核生产的新型 32 位处理器。之前使用的M3内核的芯片都不带浮点单元,而MSP432的浮点单元可以处理一些大量运算,如电机闭环控制、PID算法、快速傅里叶变换等。


图片1.png
MSP432P4系列 官网宣传页面


图片2.png
MSP432E4系列 官网宣传页面


       记得之前Ti有个活动,讲的就是MSP432系列的处理器。因为对以太网感兴趣,关注过E系列,不过Ti-rslk采用的是P系列的LaunchPad,从官网的宣传可以看出的二者的区别。P系列集成了16位的SAR ADC,E系列则集成了以太网控制器(MAC 和 PHY)。
SAR ADC 与 Sigma Delta ADC 的区别感兴趣的可以看这里Ti的工业研讨会视频http://training.eeworld.com.cn/TI/video/9206

10.jpg
小车电机驱动板

       电机驱动方案采用TI自家的H桥的DRV8838芯片,该芯片支持11V以下的电机电压,最高可提供1.8A驱动电流,并且提供过流保护、短路保护、欠压闭锁和过热保护的内部关断功能。详细的信息可以下载官方datasheet,官方连接http://www.ti.com.cn/product/cn/DRV8838



11.jpg
寻迹传感器阵列板

       传感器比较小,看着比较精致,之前用的都是特别大,因此果断查了下买点屯着。该光学传感器使用的是安森美生产的QRE1113GR反射对象传感器,不过比较惊讶的是对反射数据的处理方式,使用一种不同的方法。之前使用的都是数字量的模块,第一次见这种处理技巧,也算学到了。官网连接在这https://www.onsemi.cn/PowerSolutions/product.do?id=QRE1113GR

12.jpg
红外遥控接收传感器

        红外遥控接收传感器采用的是威世半导体的TSOP34840这款红外传感器,好像这个是ti-rslk新增的模块,之前没见相关资料有介绍红外接收模块的。传感器官网:http://www.vishay.com/product?docid=82489

13.jpg
转接板


14.jpg
铝合金底盘正面


15.jpg
铝合金底盘反面


16.jpg
电源板

       电源方案采用的是DC-DC方案,用的也是Ti自家的TPS54531降压转换器。该器件是一款 28V、5A 非同步降压转换器,支持过压瞬态保护电路可限制启动和瞬变期间的电压过冲。逐周期电流限制机制、频率折返和热关断特性可在过载条件下对器件和负载施加保护。
http://www.ti.com.cn/product/cn/TPS54531?keyMatch=tps54531&tisearch=Search-CN-Everything

17.jpg
红外遥控器


18.jpg
锂电池


19.jpg
电机


20.jpg
电机背部带霍尔编码器


21.jpg
锂电池充电器 反面


22.jpg
锂电池充电器 正面


23.jpg
万向轮


24.jpg
万向轮


25.jpg
68mm橡胶轮


26.jpg
68mm橡胶轮 带防滑纹



图片3.png
滑杆型触碰开关



27.jpg
驱动板转接排线



28.jpg
最后就是套件里的小扳手,真的是很贴心!






分割线









开发过程


       首先说下开发环境,开发环境使用的是Keil MDK5,毕竟使用几年了比较熟悉。再者也是因为MSP432支持MDK了,不会的也没关系,官方为此做了一个文档,讲的还是很详细的。
无标题.jpg
下载链接戳这:
http://www.ti.com.cn/general/cn/docs/lit/getliterature.tsp?baseLiteratureNumber=zhcu167f&fileType=pdf


       详细的MDK配置请参看上面的文档,这里补充下文档里没有的部分。LaunchPad自带XDS调试器,上面文档中介绍的可以直接在MDK里选XDS调试器,这里我没找到怎么选,用了另外一种兼容方法,这里说下,供参考。Debug选项卡中找不到XDS调试器,我直接选的CMSIS-DAP,具体见图,可以正常下载调试。
29.jpg
调试器配置


          Ti-rslk教程中讲的是使用操作寄存器方法来开发,对于我这个51的寄存器都没记熟的来说不太友好。用惯了M3系列的库,就自己去Ti官网找了驱动库。链接:http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP432_Driver_Library/latest/index_FDS.html
官方库文件包含的东西很多,有些看不懂,有些用不着就提取了一些,修改了头文件的引用目录为后面开发做准备。


图片4.png
提取后的工程文件夹中列表


       文件夹中inc文件夹为所有库文件的头文件,其中的文件引用全部修改了。Linker文件夹为编译链接文件,直接提取出来了未作修改。Src文件夹为所有库文件的源程序文件夹。Startup文件夹里面为单片机的启动文件,用于初始单片机,设置中断等过程。


       在开发的时候匠牛社区官网还没有小车的原理图,Ti官方的文档里倒是有,但是需要来回去翻文档,就索性画了个简图,方便去查传感器IO引脚。

30.jpg
小车引脚简图


drv8838 device logic.png
DRV8838 电机驱动芯片逻辑图


       下面先来说说小车的电机的驱动开发。上面是电机的驱动芯片,从引脚定义上可以看出nSLEEP用来控制芯片使能与休眠,我们可以设置高低电平让驱动芯片使能或休眠来控制电机启动与停止。PH引脚对比电平状态可以看出是用来设置正反转的。EN引脚用来控制电机启动或停止的,我们下面就用这个引脚来控制电机调速。上面原理图中为了看着方便,把nSLEEP定义为SLP,PH定义为DIR,EN定义为PWM。下面讲解重点说源程序怎么实现的,相关宏定义请自行查阅提供的附件

先定义两个定时器的PWM配置,用来生成两路PWM控制转速。

  1. Timer_A_PWMConfig LeftPWM_Config =
  2. {
  3.                 TIMER_A_CLOCKSOURCE_SMCLK,
  4.                 TIMER_A_CLOCKSOURCE_DIVIDER_1,
  5.                 TIMER_PERIOD,
  6.                 TIMER_A_CAPTURECOMPARE_REGISTER_4,
  7.                 TIMER_A_OUTPUTMODE_RESET_SET,
  8.                 DUTY_CYCLE0
  9. };
  10. Timer_A_PWMConfig RightPWM_Config =
  11. {
  12.                 TIMER_A_CLOCKSOURCE_SMCLK,
  13.                 TIMER_A_CLOCKSOURCE_DIVIDER_1,
  14.                 TIMER_PERIOD,
  15.                 TIMER_A_CAPTURECOMPARE_REGISTER_3,
  16.                 TIMER_A_OUTPUTMODE_RESET_SET,
  17.                 DUTY_CYCLE1
  18. };
复制代码
配置电机相关的IO引脚,并初始化PWM定时器
  1. GPIO_setAsPeripheralModuleFunctionOutputPin(LeftPWM_GPIO,LeftPWM_GPIO_PIN,GPIO_PRIMARY_MODULE_FUNCTION);
  2.         GPIO_setAsOutputPin(LeftDIR_GPIO, LeftDIR_GPIO_PIN);
  3.         GPIO_setAsOutputPin(LeftSLP_GPIO, LeftSLP_GPIO_PIN);
  4.         
  5.         GPIO_setAsPeripheralModuleFunctionOutputPin(RightPWM_GPIO,RightPWM_GPIO_PIN,GPIO_PRIMARY_MODULE_FUNCTION);
  6.         GPIO_setAsOutputPin(RightDIR_GPIO, RightDIR_GPIO_PIN);
  7.         GPIO_setAsOutputPin(RightSLP_GPIO, RightSLP_GPIO_PIN);
  8.                
  9.         MAP_Timer_A_generatePWM(TIMER_A0_BASE, &LeftPWM_Config);
  10.         MAP_Timer_A_generatePWM(TIMER_A0_BASE, &RightPWM_Config);
复制代码
更改PWM占空比实际只用改变比较值,接着重新更新寄存器即可。
  1. LeftPWM_Config.dutyCycle = dutyCycle;//更新比较寄存器,即更改PWM占空比
  2. Timer_A_generatePWM(TIMER_A0_BASE, &LeftPWM_Config);
复制代码
实际电机程序为方便使用我给封装起来了,提供一个接口可以设置正反转及PWM占空比,完整程序如下。
  1. /*
  2. 左侧电机转向、速度设置程序
  3. 设置电机转向及PWM占空比

  4. 输入:
  5. Direction:Forward 或 Reverse
  6. Speed:0-100 对应 0%-100%

  7. 输出:


  8. 示例:
  9. LeftMotor(Forward,50);//设置左侧电机正转,速度为全速的50%
  10. LeftMotor(Reverse,50);//设置左侧电机反转,速度为全速的50%
  11. LeftMotor(Forward,0);//设置左侧电机停转
  12. LeftMotor(Reverse,0);//设置左侧电机停转
  13. */
  14. void LeftMotor(uint8_t Direction,uint8_t Speed)
  15. {
  16.         uint_fas**_t dutyCycle;
  17.         if((Speed==0)||(Speed<=100))//判断数据是否合法
  18.         {
  19.                 dutyCycle = Speed*TIMER_PERIOD/100;//将百分数换算成实际对应的比较值
  20.                 if(Speed>0)//判断速度,大于零进行方向速度设置
  21.                 {
  22.                         if(Direction)//判断方向,进行正转设置
  23.                         {
  24.                                 GPIO_setOutputLowOnPin(LeftDIR_GPIO,LeftDIR_GPIO_PIN);//设置方向控制电平
  25.                                 LeftPWM_Config.dutyCycle = dutyCycle;//更新比较寄存器,即更改PWM占空比
  26.                         }
  27.                         else//判断方向,进行反转设置
  28.                         {
  29.                                 GPIO_setOutputHighOnPin(LeftDIR_GPIO,LeftDIR_GPIO_PIN);//设置方向控制电平
  30.                                 LeftPWM_Config.dutyCycle = dutyCycle;//更新比较寄存器,即更改PWM占空比
  31.                         }
  32.                         GPIO_setOutputHighOnPin(LeftSLP_GPIO,LeftSLP_GPIO_PIN);//唤醒驱动模块
  33.                 }
  34.                 else//判断速度,不大于零进行停车设置
  35.                 {
  36.                         GPIO_setOutputLowOnPin(LeftSLP_GPIO,LeftSLP_GPIO_PIN);//休眠驱动模块
  37.                         LeftPWM_Config.dutyCycle = dutyCycle;//更新比较寄存器,即更改PWM占空比
  38.                 }
  39.         }
  40.         Timer_A_generatePWM(TIMER_A0_BASE, &LeftPWM_Config);
  41. }
复制代码

10_17_2001-23_58_39.png
PWM占空比10%




10_17_2001-23_59_4.png
PWM占空比50%


10_17_2001-23_59_13.png
PWM占空比100%


下面再说说红外遥控怎么解码,说实话不是太懂,程序移植网上大牛的,在这里说下过程吧。示波器抓的图不好看,就用逻辑分析仪又抓了个图。

10_18_2001-0_6_29.png
示波器抓的图


图片6.png
逻辑分析仪抓的时序图


       程序使用一个定时器产生0.1ms的周期中断,中断中记录中断次数,处理程序根据中断次数计算时序电平持续时间,进而判断协议,进行解码。
配置中断周期为0.1ms的定时器
  1. Canst Timer_A_UpModeConfig upConfig =
  2. {
  3.         TIMER_A_CLOCKSOURCE_SMCLK,              // SMCLK Clock Source
  4.         TIMER_A_CLOCKSOURCE_DIVIDER_12,         // SMCLK/12 = 1MHz
  5.         TIMER_PERIOD,                           // 100 tick period
  6.         TIMER_A_TAIE_INTERRUPT_DISABLE,         // Disable Timer interrupt
  7.         TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE ,    // Enable CCR0 interrupt
  8.         TIMER_A_DO_CLEAR                        // Clear value
  9. };
复制代码
下面初始化定时器,并设置定时器中断,设置红外IO口为下降沿中断,这里要注意中断优先级,定时器的中断要高于红外遥控IO的中断。
  1. Timer_A_configureUpMode(TIMER_A1_BASE, &upConfig);
  2.         Interrupt_enableInterrupt(INT_TA1_0);
  3.         Timer_A_startCounter(TIMER_A1_BASE, TIMER_A_UP_MODE);
  4.         
  5.         GPIO_setAsInputPinWithPullUpResistor(IrDa_GPIO, IrDa_GPIO_PIN);
  6.         GPIO_clearInterruptFlag(IrDa_GPIO, IrDa_GPIO_PIN);
  7.         GPIO_interruptEdgeSelect(IrDa_GPIO,IrDa_GPIO_PIN,GPIO_HIGH_TO_LOW_TRANSITION);
  8.         GPIO_enableInterrupt(IrDa_GPIO, IrDa_GPIO_PIN);
  9.         Interrupt_enableInterrupt(IrDa_IRQCHANNEL);

  10.         Interrupt_setPriorityGrouping(NVIC_APINT_PRIGROUP_7_1);
  11.         Interrupt_setPriority(IrDa_IRQCHANNEL, 0x80);
  12.         Interrupt_setPriority(INT_TA1_0, 0x70);
复制代码
红外口中断服务程序
  1. if(startflag)
  2.   {
  3.       if(ucTim2Flag < 150 && ucTim2Flag >= 50 ) // 接收到同步头
  4.       {
  5.           idx=0;  // 数组下标清零
  6.       }
  7.       irdata[idx] = ucTim2Flag;  // 获取计数时间
  8.       ucTim2Flag = 0;            // 清零计数时间,以便下次统计
  9.       idx++;                     // 接收到一个数据,索引加1

  10.       if(idx==33)       // 如果接收到33个数据,包括32位数和以一个同步头
  11.       {
  12.           idx=0;
  13.           ucTim2Flag = 0;
  14.           receiveComplete = true;
  15.       }
  16.   }
  17.   else   // 下降沿第一次触发
  18.   {
  19.       idx = 0;
  20.       ucTim2Flag = 0;
  21.       startflag = true;
  22.   }
复制代码
数据处理服务程序
  1. uint8_t i,j,idx=1; //idx 从1 开始表示对同步头的时间不处理
  2.   uint8_t temp;
  3.   for(i=0; i<4; i++)
  4.   {
  5.       for(j=0; j<8; j++)
  6.       {
  7.           if(irdata[idx] >=8 && irdata[idx] < 15)   //表示 0
  8.           {
  9.               temp = 0;
  10.           }
  11.           else if(irdata[idx] >=18 && irdata[idx]<25) //表示 1
  12.           {
  13.               temp = 1;
  14.           }
  15.           remote_code[i] <<= 1;
  16.           remote_code[i] |= temp;
  17.           idx++;
  18.       }
  19.   }
  20.   return remote_code[2];  // 该数组中记录的是控制码,每个按键不一样
复制代码


寻迹传感器处理也比较简单,就是在没有示波器的情况下不好弄,这里我也把程序封装起来了,只需调用API即可。


10_17_2001-23_53_23.png
寻迹传感器底噪

处理方法来自TI视频中介绍的,我也是第一次接触,感觉挺灵活的。主要是来判断电平持续的时间,来判断当前寻迹传感器的状态。


10_17_2001-23_51_53.png
寻迹传感器黑线时状态
上面两张图我们对比可以看出,我们在采样时只要在底噪之后进行读取电平即可。
  1. /*
  2. 寻迹传感器状态获取程序
  3. 获取传感器1、2、3、4、5、6、7、8电平状态。

  4. 输入:
  5. value:采集IO口电平的时间,参数值小于10000。for循环共10000次,采集时间只要错过底噪电平即可。

  6. 输出:
  7. P7口电平状态。

  8. 示例:
  9. temp=Line_GetState(2000);
  10. */
  11. uint8_t Line_GetState(uin**_t value)
  12. {
  13.         uint8_t state=0;
  14.         GPIO_setAsOutputPin(LineSensorSwitch_GPIO_PORT, LineSensorSwitch_GPIO_PIN);
  15.         GPIO_setOutputHighOnPin(LineSensorSwitch_GPIO_PORT, LineSensorSwitch_GPIO_PIN);
  16.         GPIO_setAsOutputPin(LineSensor_GPIO_PORT, PIN_ALL8);
  17.         GPIO_setOutputHighOnPin(LineSensor_GPIO_PORT,PIN_ALL8);
  18.         Delay_10us(1);
  19.         GPIO_setAsInputPin(LineSensor_GPIO_PORT, PIN_ALL8);
  20.         for(int i=0;i<10000;i++)
  21.         {
  22.                 if(i==value)
  23.                 {
  24.                         state=P7->IN;
  25.                 }
  26.         }
  27.         GPIO_setOutputLowOnPin(LineSensorSwitch_GPIO_PORT,LineSensorSwitch_GPIO_PIN);
  28.         return state;
  29. }
复制代码

另外为了方便调试,移植了printf函数,下面说说怎么配置的。
设置uart配置,这里时钟用的是SMCLK,12Mhz,初始化DCO为12Mhz,其他时钟频率需要自己进行计算配置了。
  1. const eUSCI_UART_Config uartConfig =
  2. {
  3.         EUSCI_A_UART_CLOCKSOURCE_SMCLK,          // SMCLK Clock Source
  4.         78,                                      // BRDIV = 78
  5.         2,                                       // UCxBRF = 2
  6.         0,                                      // UCxBRS = 0
  7.         EUSCI_A_UART_NO_PARITY,                  // No Parity
  8.         EUSCI_A_UART_LSB_FIRST,                  // LSB First
  9.         EUSCI_A_UART_ONE_STOP_BIT,               // One stop bit
  10.         EUSCI_A_UART_MODE,                       // UART mode
  11.         EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION  // Oversampling
  12. };
复制代码
配置GPIO并初始化相关寄存器
  1. MAP_GPIO_setAsPeripheralModuleFunctionInputPin(USART_GPIO,
  2.             USART_RX_GPIO_PIN | USART_TX_GPIO_PIN, GPIO_PRIMARY_MODULE_FUNCTION);

  3.     /* Setting DCO to 12MHz */
  4.     CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_12);

  5.     //![Simple UART Example]
  6.     /* Configuring UART Module */
  7.     MAP_UART_initModule(EUSCI_A0_BASE, &uartConfig);
  8.     /* Enable UART module */
  9.     MAP_UART_enableModule(EUSCI_A0_BASE);

  10.     /* Enabling interrupts */
  11.     MAP_UART_enableInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
  12.     MAP_Interrupt_enableInterrupt(INT_EUSCIA0);
复制代码
串口重定义
  1. int fputc(int ch, FILE *f)
  2. {
  3.         MAP_UART_transmitData(EUSCI_A0_BASE, (uint8_t) ch);
  4.   while (UART_getInterruptStatus(EUSCI_A0_BASE, EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG) == 0);               
  5.   return (ch);
  6. }

  7. int fgetc(FILE *f)
  8. {
  9.   while(UART_getInterruptStatus(EUSCI_A0_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG) == 0);
  10.   return (int)UART_receiveData(EUSCI_A0_BASE);
  11. }
复制代码


图片5.png
勾选微库选项

碰撞传感器在中断中做了处理,基本上涉及中断的都定义在msp432_it.c文件中,使用时可以方便修改重定义。另使用系统滴答定时器移植了延时函数,像LED、按键都完成了相关程序,负责接收蓝牙数据的串口也也初始化了都比较简单不在一一介绍了。
最后上张MDK工程的图

图片7.png
MDK工程

再说说mt7628核心板刷openwrt以及设置摄像头

图片8.png
7628核心板

比较穷,买不起好的数传模块就自己折腾了。方案选的是mt7628比网上卖的ar9331的要好,就是折腾起来比较费劲。下面是根据官方给的引脚图焊的最小系统,RJ45接口一定要买带网络变压器的,这样比较省事。我焊了俩接口一个lan一个wan,其实只焊一个lan口就行。
另外要把串口0给引出来,通过uboot来升级固件,刚开始不建议刷uboot,刷错就是俗说成砖了,解决办法就是要用编程器来刷flash比较麻烦。模块官方给了个文档,可以参考下。


图片9.png
mt7628核心板最小系统

串口设置什么的文档里比较详细这就不写了,下面贴下我刷固件时的日志
  1. U-Boot 1.1.3 (Aug 28 2017 - 15:02:42)

  2. Board: Ralink APSoC DRAM:  64 MB
  3. relocate_code Pointer at: 83fb8000
  4. flash manufacture id: c2, device id 20 18
  5. find flash: MX25L12805D
  6. *** Warning - bad CRC, using default environment

  7. ============================================
  8. Ralink UBoot Version: 4.3.0.0
  9. --------------------------------------------
  10. ASIC 7628_MP (Port5<->None)
  11. DRAM component: 512 Mbits DDR, width 16
  12. DRAM bus: 16 bit
  13. Total memory: 64 MBytes
  14. Flash component: SPI Flash
  15. Date:Aug 28 2017  Time:15:02:42
  16. ============================================
  17. icache: sets:512, ways:4, linesz:32 ,total:65536
  18. dcache: sets:256, ways:4, linesz:32 ,total:32768

  19. ##### The CPU freq = 580 MHZ ####
  20. estimate memory size =64 Mbytes
  21. RESET MT7628 PHY!!!!!!
  22. Please choose the operation:
  23.    1: Load system code to SDRAM via TFTP.
  24.    2: Load system code then write to Flash via TFTP.
  25.    3: Boot system code via Flash (default).
  26.    4: Entr boot command line interface.
  27.    7: Load Boot Loader code then write to Flash via Serial.
  28.    9: Load Boot Loader code then write to Flash via TFTP.
  29. default: 3
  30. 3
  31. You choosed 2

  32. 0
  33. luke: BootType=2

  34.    
  35. 2: System Load Linux Kernel then write to Flash via TFTP.
  36. Warning!! Erase Linux in Flash then burn new one. Are you sure?(Y/N)
  37. Please Input new ones /or Ctrl-C to discard
  38.         Input device IP (192.168.16.123) ==:192.168.1.23  
  39.         Input server IP (192.168.16.112) ==:192.168.1.133
  40.         Input Linux Kernel filename () ==:7628.bin

  41. netboot_common, argc= 3

  42. NetTxPacket = 0x83FE5B00

  43. KSEG1ADDR(NetTxPacket) = 0xA3FE5B00

  44. NetLoop,call eth_halt !

  45. NetLoop,call eth_init !
  46. Trying Eth0 (10/100-M)

  47. Waitting for RX_DMA_BUSY status Start... done


  48. ETH_STATE_ACTIVE!!
  49. TFTP from server 192.168.1.133; our IP address is 192.168.1.23
  50. Filename '7628.bin'.

  51. TIMEOUT_COUNT=10,Load address: 0x80100000
  52. Loading: checksum bad
  53. checksum bad
  54. Got ARP REPLY, set server/gtwy eth addr (80:c1:6e:3e:49:1c)
  55. Got it
  56. #################################################################
  57.          #################################################################
  58.          #################################################################
  59.          #################################################################
  60.          #################################################################
  61.          #################################################################
  62.          #################################################################
  63.          #################################################################
  64.          #################################################################
  65.          #################################################################
  66.          #################################################################
  67.          #################################################################
  68.          #################################################################
  69.          #################################################################
  70.          #################################################################
  71.          #################################################################
  72.          #################################################################
  73.          ############################################################Got ARP REQUEST, return our IP
  74. #####
  75.          #################################################################
  76.          #################################################################
  77.          #################################################################
  78.          #################################################################
  79.          #################################################################
  80.          #################################################################
  81.          #################################################################
  82.          #################################################################
  83.          #################################################################
  84.          #################################################################
  85.          #################################################################
  86.          #################################################################
  87.          #################################################################
  88.          #################################################################
  89.          #################################################################
  90.          #################################################################
  91.          #################################################################
  92.          #################################################################
  93.          #################################################################
  94.          #################################################################
  95.          #################################################################
  96.          ##########################
  97. done
  98. Bytes transferred = 13107369 (c800a9 hex)
  99. NetBootFileXferSize= 00c800a9
  100. ........................................................................................................................................................................................................
  101. ........................................................................................................................................................................................................
  102. .
  103. .
  104. Done!
  105. ## Booting image at bc050000 ...
  106.    Image Name:   MIPS LEDE Linux-4.4.70
  107.    Image Type:   MIPS Linux Kernel Image (lzma compressed)
  108.    Data Size:    1384509 Bytes =  1.3 MB
  109.    Load Address: 80000000
  110.    Entry Point:  80000000
  111.    Verifying Checksum ... OK
  112.    Uncompressing Kernel Image ... OK
  113. No initrd
  114. ## Transferring control to Linux (at address 80000000) ...
  115. ## Giving linux memsize in MB, 64

  116. Starting kernel ...

  117. [    0.000000] Linux version 4.4.70 (sxx@sxx-pc) (gcc version 5.4.0 (LEDE GCC 5.4.0 r3508-53f5d59) ) #0 Mon Jun 5 19:30:05 2017
  118. [    0.000000] Board has DDR2
  119. [    0.000000] Analog PMU set to hw control
  120. [    0.000000] Digital PMU set to hw control
  121. [    0.000000] SoC Type: MediaTek MT7628AN ver:1 eco:2
  122. [    0.000000] bootconsole [early0] enabled
  123. [    0.000000] CPU0 revision is: 00019655 (MIPS 24KEc)
  124. [    0.000000] MIPS: machine is WRTnode2P
  125. [    0.000000] Determined physical RAM map:
  126. [    0.000000]  memory: 04000000 @ 00000000 (usable)
  127. [    0.000000] Initrd not found or empty - disabling initrd
  128. [    0.000000] Zone ranges:
  129. [    0.000000]   Normal   [mem 0x0000000000000000-0x0000000003ffffff]
  130. [    0.000000] Movable zone start for each node
  131. [    0.000000] Early memory node ranges
  132. [    0.000000]   node   0: [mem 0x0000000000000000-0x0000000003ffffff]
  133. [    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000003ffffff]
  134. [    0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
  135. [    0.000000] Primary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes
  136. [    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
  137. [    0.000000] Kernel command line: console=ttyS0,115200 **fstype=squashfs,jffs2
  138. [    0.000000] PID hash table entries: 256 (order: -2, 1024 bytes)
  139. [    0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
  140. [    0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
  141. [    0.000000] Writing ErrCtl register=000599d4
  142. [    0.000000] Readback ErrCtl register=000599d4
  143. [    0.000000] Memory: 60388K/65536K available (3201K kernel code, 146K rwdata, 776K rodata, 156K init, 198K bss, 5148K reserved, 0K cma-reserved)
  144. [    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
  145. [    0.000000] NR_IRQS:256
  146. [    0.000000] intc: using register map from devicetree
  147. [    0.000000] CPU Clock: 580MHz
  148. [    0.000000] clocksource_probe: no matching clocksources found
  149. [    0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 6590553264 ns
  150. [    0.000012] sched_clock: 32 bits at 290MHz, resolution 3ns, wraps every 7405115902ns
  151. [    0.015353] Calibrating delay loop... 385.84 BogoMIPS (lpj=1929216)
  152. [    0.080517] pid_max: default: 32768 minimum: 301
  153. [    0.089777] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
  154. [    0.102723] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
  155. [    0.122783] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
  156. [    0.142175] futex hash table entries: 256 (order: -1, 3072 bytes)
  157. [    0.154344] pinctrl core: initialized pinctrl subsystem
  158. [    0.165286] NET: Registered protocol family 16
  159. [    0.177435] rt2880-pinmux pinctrl: invalid group "jtag" for function "gpio"
  160. [    0.298009] mt7620-pci 10140000.pcie: Port 0 N_FTS = 1b105000
  161. [    0.459017] mt7620-pci 10140000.pcie: PCIE0 no card, disable it(RST&CLK)
  162. [    0.472156] mt7620-pci: probe of 10140000.pcie failed with error -1
  163. [    0.494770] mt7621_gpio 10000600.gpio: registering 32 gpios
  164. [    0.505835] mt7621_gpio 10000600.gpio: registering 32 gpios
  165. [    0.516841] mt7621_gpio 10000600.gpio: registering 32 gpios
  166. [    0.528758] i2c-mt7621 10000900.i2c: clock 100KHz, re-start not support
  167. [    0.542047] Advanced Linux Sound Architecture Driver Initialized.
  168. [    0.554969] clocksource: Switched to clocksource MIPS
  169. [    0.566334] NET: Registered protocol family 2
  170. [    0.575789] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
  171. [    0.589489] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
  172. [    0.602008] TCP: Hash tables configured (established 1024 bind 1024)
  173. [    0.614653] UDP hash table entries: 256 (order: 0, 4096 bytes)
  174. [    0.626118] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
  175. [    0.638742] NET: Registered protocol family 1
  176. [    0.652567] Crashlog allocated RAM at address 0x3f00000
  177. [    0.678200] squashfs: version 4.0 (2009/01/31) Phillip Lougher
  178. [    0.689667] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
  179. [    0.711667] io scheduler noop registered
  180. [    0.719346] io scheduler deadline registered (default)
  181. [    0.730375] Serial: 8250/16550 driver, 3 ports, IRQ sharing disabled
  182. [    0.744148] console [ttyS0] disabled
  183. [    0.751165] 10000c00.uartlite: ttyS0 at MMIO 0x10000c00 (irq = 28, base_baud
复制代码
等固件启动完成,输入路由地址进入设置页面,登陆密码为空,直接点登陆进入设置
图片10.png
openwrt登录界面

点击上侧“服务”选项,在点击下侧的“MJPG-streamer”根据自己的摄像头进行设置就行了,只要是uvc免驱的好像都支持。
图片11.png
摄像头设置页面

图片12.png


设置完成,启动成功的话摄像头的指示灯会亮,我的就是小绿灯亮了。在浏览器中输入路由ip及MJPG-streamer端口就可访问摄像头的画面了。


图片13.png
蓝牙模块

蓝牙模块买的是带AT固件的,想着其他同学使用的话可以方便移植,将模块焊好后准备调试发现一直无响应最后检查发现电源接的5V,连个OK我都没见到呢。。。没办法就使用不带固件的,重新做了个小板加了个ams117 3.3怕再接错。程序自己找例程改了个透传的固件。IAR工程,但是需要ccdebug来下程序。

图片14.png
蓝牙模块

图片15.png
蓝牙模块IAR工程

蓝牙APP使用的是易安卓编的,全中文程序不再介绍。
图片16.png
易安卓工程


图片17.png
安卓手机程序界面

最终小车效果
IMG_20190324_165402.jpg



IMG_20190324_165450.jpg


上面俩图是做好后测试没问题拍的,后面把小车拿出去跑发现MT7628核心板有点热,就又换了下布局加装了散热片。
IMG_20190327_190314.jpg


打赏

参与人数 2赫兹币 +10 积分 +10 收起 理由
shengxiang + 5 + 10 很给力!
jason-peng + 5 很给力!

查看全部打赏

1

主题

3

帖子

117

积分

二氧化硅

Rank: 2

积分
117
发表于 2019-3-27 19:42:15   只看该作者
本帖最后由 gsll 于 2019-3-28 09:34 编辑

GSMCJ[I5CSQMYNP{$$M)QU4.png

论坛限制,直接传不上来,分包传了。
Ti-rslk整车程序,MDK 5工程。
Ti-rslk.rar (6.19 MB, 下载次数: 138)

17

主题

137

帖子

553

积分

单晶硅锭

Rank: 3Rank: 3

积分
553
发表于 2019-3-29 11:08:43   只看该作者
赞一个,很详细!

0

主题

1

帖子

69

积分

一粒轻沙

Rank: 1

积分
69
发表于 2019-4-2 00:27:39   只看该作者
gsll 发表于 2019-3-27 19:42
论坛限制,直接传不上来,分包传了。
Ti-rslk整车程序,MDK 5工程。

很好nice

0

主题

1

帖子

149

积分

二氧化硅

Rank: 2

积分
149
发表于 2019-4-2 13:08:49   只看该作者

后期测试还有吗?

1

主题

3

帖子

117

积分

二氧化硅

Rank: 2

积分
117
发表于 2019-4-3 09:36:18   只看该作者
anker 发表于 2019-4-2 13:08
后期测试还有吗?

有的,等忙完这几天。后面准备录个寻迹的以及室外出去跑+小车视角的视频。

73

主题

469

帖子

1007

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1007
发表于 2019-7-5 14:24:14   只看该作者
gsll 发表于 2019-3-27 19:42
论坛限制,直接传不上来,分包传了。
Ti-rslk整车程序,MDK 5工程。


这个帖子 非常给力~

0

主题

12

帖子

170

积分

二氧化硅

Rank: 2

积分
170
发表于 2019-7-17 11:36:08   只看该作者
顶一个,非常给力!

0

主题

1

帖子

3

积分

一粒轻沙

Rank: 1

积分
3
发表于 2019-11-15 11:18:49   只看该作者
gsll 发表于 2019-3-27 19:42
**** 作者被禁止或删除 内容自动屏蔽 ****

讲的非常详细,很赞!!!
快速回复 返回顶部 返回列表