完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
2个回答
|
|
1.TinyG项目简介
TinyG项目是一个多轴运动控制系统,它面向数控加工中心和其它需要高精度运动控制的应用场景。TinyG是一个针对中小型功率电机控制的嵌入式解决方案。下面列出TinyG 第8版硬件的主要特点: 1) 采用Atmel ATxmega192嵌入式控制器; 2) 将4路基于TI DRV8818芯片的步进电机驱动器集成在4英寸的电路板上; 3) 步进电机驱动器相电流可达2.5A,可支持NEMA17系列电机和大部分NEMA23s系列电机; 4) 支持USB口接收G代码指令,板内解释执行; 5) 6个轴可映射至任意四个电机; 6) 采用恒定急动度(加加速度)的速度规划方式(3阶S速度曲线); 7) 采用单个周期内,相位优化的脉冲发生算法,输出脉冲平滑。在50kHz实现DDA算法时,输出信号频率抖动非常小; 8) 可达到1/8微步,采用优化后的DDA算可达到1/16 。 2.固件源代码分析 2.1 固件源代码主流程 TinyG固件基于C语言开发,采用简易的前后台系统:后台主循环设置在main函数结尾,各子功能以任务函数的形式依次出现主循环中,借助状态机控制主循环的执行路径;前台中断处理定时事件,刷新输出脉冲控制电机。其固件代码执行起点在Main.c文件中的main函数。Main函数分3段。第1段源码: _system_init(); 其主要功能是禁用ATxmega192芯片看破门狗,始化C语言运行库,启动USB枚举过程,连接PC机; 第2段源码: _application_init(); run_canned_startup(); // 目前为空 其中_application_init()函数包含: hardware_init(); // 设置芯片工作频率16MHz persistence_init(); // 设置掉电不丢失数据RAM的基地址 rtc_init(); // 设置万年历功能 xio_init(); // 初始化串口,SPI接口,USB接口,文件访问接口 // stepper_init(); // 初始化步进电机的相关定时器和I/O口 encoder_init(); // 清零编码器变量 switch_init(); // 初始化各轴限位开关输入引脚 pwm_init(); // 初始化PWM1和PWM2输出 // controller_init(STD_IN, STD_OUT, STD_ERR); //设置标准输入输出 config_init(); //从EEPROM中读取JSON格式的配置文件 network_init(); // 初始化RS485为标准输入,USB为标准输出和标准错误 planner_init(); // 初始化粗插补器的缓存队列 canonical_machine_init(); //初始化G代码解释器` 以下源码初始化中断控制器: PMIC_SetVectorLocationToApplication(); // PMIC_EnableHighLevel(); PMIC_EnableMediumLevel(); PMIC_EnableLowLevel(); 第3段源码: for ( ; ; ) { controller_run( ); // single pass through the controller } 主任务循环函数controller_run直接调用_controller_HSM函数,该函数内部包含多个子任务函数,且功能注释如下: DISPATCH(hw_hard_reset_handler()); // 1. 复位看门狗 DISPATCH(hw_bootloader_handler()); // 2. 软件复位 DISPATCH(_shutdown_idler()); // 3. 待机任务 // DISPATCH( poll_switches()); // 4. DISPATCH(_limit_switch_handler()); // 5. 限位报警开关处理函数 DISPATCH(cm_feedhold_sequencing_callback()); // 6a. 进给运动(见1.2详解) DISPATCH(mp_plan_hold_callback()); // 6b. plan a feedhold from line runtime DISPATCH(_system_assertions()); // 7. 崩溃诊断函数 //----- planner hierarchy for gcode and cycles ---------------------------------------// DISPATCH(st_motor_power_callback()); // 步进电机驱动电源启停管理 DISPATCH(sr_status_report_callback()); // 发送状态报告 DISPATCH(qr_queue_report_callback()); // 发送指令缓存状态报告 DISPATCH(rx_report_callback()); // conditionally send rx report DISPATCH(cm_arc_callback()); // arc generation runs behind lines DISPATCH(cm_homing_callback()); // 搜索原点感应器 DISPATCH(cm_jogging_callback()); // 慢进给 DISPATCH(cm_probe_callback()); // G38.2 continuation DISPATCH(cm_deferred_write_callback()); // 保存数据 // 以下源码实现串口终端交换功能 DISPATCH(_sync_to_planner()); // 检测指令缓存空间大小 DISPATCH(_sync_to_tx_buffer()); // 写入发送缓存 DISPATCH(set_baud_callback()); // 更新串口波特率 DISPATCH(_command_dispatch()); // 执行串***互指令 DISPATCH(_normal_idler()); // 空闲任务节能 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3209 浏览 9 评论
2896 浏览 16 评论
3402 浏览 1 评论
8844 浏览 16 评论
3997 浏览 18 评论
9627浏览 3评论
1004浏览 3评论
520浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
523浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2250浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-1 11:41 , Processed in 0.964705 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号