论坛回复已创建
-
作者帖子
-
day_day参与者
电气组件介绍
电机驱动模块选型。电机驱动模块采用DRV8825、A4988混合驱动。A4988是一款常见的步进电机驱动芯片,其模块广泛用于3D打印机的步进电机驱动,具有成本低、功耗小、驱动能力强的特点,适合42步步进电机在负载不大的情况下驱动运行,因此可用于回转轴驱动,最重要的是,在两块DRV8825模块同时驱动的情况下,剩余功率不足以提供第三块DRV8825动作,经实测两块DRV8825与一块A4988能够正常运行。DRV8825是德州仪器的集成电机芯片,其模块设计兼容A4988,但稳定性更好,能够提供高达1.5A的电流,适合驱动负载稍大的步进电机,因此可用于驱动主轴和副轴。
位姿反馈方案设计。采用MPU6050六轴运动传感器,包含陀螺仪和倾角传感器,能够通过I2C与上位机通讯。在每次运动起始和完成阶段进行一次位姿矫正,防止运动误差累积。
舵机选型及驱动方案设计。舵机采用MG996R型号的180°舵机,该舵机工作在4.8-7.2V之间,能够提供9.4kg/cm以上的拉力。为了满足驱动舵机的功率以及防止舵机运行时的电流涌浪,舵机采用额外的5V供电,驱动端口采用光耦IC隔离。光耦IC型号选择为PC817。
供电体系设计。系统由12V直流电源供电,经过一块MP1584模块降压为5V直流电源,供给传感器与主控板卡。另外12V直流电源还通过另一块MP1584模块降压为5V向舵机供电。
上下位机通讯方案设计。由于受各种较大功率的设备影响,系统存在一定的电源涌浪,CH340G芯片以及主控板卡板载的DAP仿真器无法正常工作在这个电源体系下,因此需要采用更稳定的工业串口通讯方案——232通讯或者不受涌浪影响的透传蓝牙模块HC-06。
驱动板文件见:
https://git.lug.ustc.edu.cn/dayday/tarm/tree/master/PCB/TARM_V2
程序组件介绍
tarm_communication组件
负责对上下位机通讯。外设启动了两个串口:UART0控制台串口、UART1设备串口。控制台串口位于板卡上;设备串口通过arduino型接口与驱动板连接,驱动板上可以通过跳帽选择使用RS232或者无线蓝牙模块作为传输介质。支持打断控制。
指令为自定义命令集,格式如下:
_&<命令><参数>;<命令><参数>;<命令><参数>
参数支持包括:
指令 作用 X Y 指定XY平面的点,使机械臂运动到该点 S 复位 E 查询当前运动状态 F 向前移动 B 向后移动 U 向上移动 D 向下移动 R 绕Z旋转轴转动 C 夹持末端回转轴转动 T 夹持轴转动 tarm_time组件
为各轴运动提供时基。
定时器定时实现。
timebase为第一套算法提供时基,该算法仅支持一般恒速运动,可以调节一次运动的速度;可以实现三轴联动;使用的时钟是TMR0。
timepv为第二套算法提供时基,该算法仅支持主轴、副轴联动;对运动过程有变速控制,为针对液体平稳搬运环境的优化算法。该算法基于一个传递函数,传递函数采用了一个三角函数。
tarm_limit组件
限位器组件
协助机械臂进行初始化定位。
限制机械臂运动行程。通过外部中断实现。触碰到限位器时,返回设定的零点。
tarm_io组件
对脉冲输出端口、方向控制端口配置、初始化。控制主轴、副轴、绕Z旋转轴的三个步进电机。
Closeloop组件
反馈控制。通过硬件IIC总线访问MPU6050,校准运动误差,使运动误差不积累。在外部因素影响导致IIC硬接线断开时,能自动转化为开环模式。
tarm_pwm组件
通过输出PWM控制夹持末端回转轴、夹持轴的舵机。
原本设计通过TPM外设输出PWM,但由于机械结构部分和硬件电气部分存在设计错误,后拟定改用IIC总线控制PCA9685输出PWM。未适配。
源代码:
演示视频:
https://user.qzone.qq.com/1061368165/infocenter
day_day参与者我按照上述方法:
在hello_world基础上,把对应工程配置文件里面的hello_world字符串搜索替换成你自己的工程名字。
来了一遍,依然不行。可能是由于我把整个工程挪了个位置,现在又有以下问题:
Open On-Chip Debugger 0.10.0+dev-00433-g849f49ca (2019-01-04-07:48)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Unexpected command line argument: MCUday_day参与者https://pan.baidu.com/s/1I1EOC68-q-hq_L5ACFJXvg
这个是我实验自建工程,能用相对路径的都使用了相对路径,关于编译链方面可能有比较多的绝对路径,如果能帮忙看一下问题在哪就最好了,弄不懂怎么自建工程真的寸步难行,完全无法着手开发
day_day参与者编译是可以编译了,但编译出来之后有些问题,不能够连接板子debug,似乎是工程配置还有问题。我以gpio例程为例试了一次。
build的时候/或者clean之后再build,提示没有<工程名>.elf文件,这个文件应该是自动编译生成的,为什么要我来提供?而且不知道为什么clean的时候会清除掉<工程名>.elf文件,我在官方例程中clean是不会清除的。
错误提示:
Info: Internal Builder is used for build
riscv32-unknown-elf-gcc -msmall-data-limit=8 -mno-save-restore -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -DDEBUG -DCPU_RV32M1_ri5cy -I../utilities -I../drivers -I../board -I../src -I../startup -std=gnu11 -march=rv32imcxpulpv2 -Wa,-march=rv32imcxpulpv2 -c -o src\gpio_led_output.o ..\src\gpio_led_output.c
riscv32-unknown-elf-gcc -msmall-data-limit=8 -mno-save-restore -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -DDEBUG -DCPU_RV32M1_ri5cy -I../utilities -I../drivers -I../board -I../src -I../startup -std=gnu11 -march=rv32imcxpulpv2 -Wa,-march=rv32imcxpulpv2 -c -o drivers\fsl_gpio.o ..\drivers\fsl_gpio.c
riscv32-unknown-elf-gcc -msmall-data-limit=8 -mno-save-restore -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -DDEBUG -DCPU_RV32M1_ri5cy -I../utilities -I../drivers -I../board -I../src -I../startup -std=gnu11 -march=rv32imcxpulpv2 -Wa,-march=rv32imcxpulpv2 -c -o drivers\fsl_lpuart.o ..\drivers\fsl_lpuart.c
riscv32-unknown-elf-gcc -msmall-data-limit=8 -mno-save-restore -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -DDEBUG -DCPU_RV32M1_ri5cy -I../utilities -I../drivers -I../board -I../src -I../startup -std=gnu11 -march=rv32imcxpulpv2 -Wa,-march=rv32imcxpulpv2 -c -o board\clock_config.o ..\board\clock_config.c
riscv32-unknown-elf-gcc -msmall-data-limit=8 -mno-save-restore -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -x assembler-with-cpp -DDEBUG -c -o startup\startup_RV32M1_ri5cy.o ..\startup\startup_RV32M1_ri5cy.S
riscv32-unknown-elf-gcc -msmall-data-limit=8 -mno-save-restore -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -DDEBUG -DCPU_RV32M1_ri5cy -I../utilities -I../drivers -I../board -I../src -I../startup -std=gnu11 -march=rv32imcxpulpv2 -Wa,-march=rv32imcxpulpv2 -c -o utilities\fsl_debug_console.o ..\utilities\fsl_debug_console.c
riscv32-unknown-elf-gcc -msmall-data-limit=8 -mno-save-restore -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -DDEBUG -DCPU_RV32M1_ri5cy -I../utilities -I../drivers -I../board -I../src -I../startup -std=gnu11 -march=rv32imcxpulpv2 -Wa,-march=rv32imcxpulpv2 -c -o drivers\fsl_lpi2c.o ..\drivers\fsl_lpi2c.c
riscv32-unknown-elf-objcopy -O ihex second.elf second.hex
riscv32-unknown-elf-objcopy: ‘second.elf’: No such file
Info: Parallel threads used: 422:50:05 Build Finished. 0 errors, 0 warnings. (took 2s.852ms)
我自作聪明地把例程里面的elf文件拷贝到自建工程目录下,把文件名改为自建工程的文件名,结果能够顺利编译,但编译出来的大小是官方例程的4倍,源码都是一样的。而且debug出错,官方例程debug并不会出错。
错误对话框内容:
‘Launching <工程名>.elf’ has encountered a problem. Error starting process
DETAILS:
Error starting process.
Cannot run program “F:\VEGA_Board\VEGA_Study2\second\Debug\second.elf”: Launching failed
Cannot run program “F:\VEGA_Board\VEGA_Study2\second\Debug\second.elf”: Launching failed
Cannot run program “F:\VEGA_Board\VEGA_Study2\second\Debug\second.elf”: Launching failed对eclipes的操作还是很头大啊。
<!–StartFragment –>
<!–StartFragment –>
day_day参与者飞线,要额外飞线的,看清楚帖子
-
作者帖子